38 votes

Pourquoi cela ne fonctionne-t-il pas dans cet interrupteur?

Pour ce programme:

 class Program
{
    static void Main(string[] args)
    {
        var state = States.One;
        switch (state)
        {
            case States.One:
                Console.WriteLine("One");
                break;
            case States.Zero:
                goto case States.One;
        }
    }
}

public enum States : ulong
{
    Zero = 0,
    One = 1,
}
 

J'ai eu:

"Une expression de commutateur ou une étiquette de cas doit être un type bool, char, chaîne, intégrale, enum ou le type nullable correspondant"

Mais state variable est enum Type. L'erreur disparaît si je commente la ligne goto case .

J'utilise VS 2013. + .NET 4.5.1.

64voto

Euphoric Points 7641

Il s'agit d'un bogue connu du compilateur C # lorsque enum est saisi sous la forme ulong et que vous utilisez goto case en même temps. Si vous supprimez les ulong de enum , la compilation est parfaite. Et parce que peu de gens rencontrent ce problème, ils ne cherchent pas à le résoudre.

6voto

T_D Points 940

En fonction de votre cas d'utilisation, cela pourrait également être une option pour vous:

 switch (state)
{
    case States.Zero:
    case States.One:
        Console.WriteLine("One");
        break;
}
 

Cela devrait fonctionner selon un exemple ici: http://msdn.microsoft.com/de-de/library/06tc147t.aspx

4voto

David S. Points 3239

Vous pouvez utiliser une étiquette pour goto au lieu d'utiliser les case directement dans l'instruction goto:

 switch (state)
{
    case States.One:
caseZeroRedirect:
        Console.WriteLine("One");
        break;
    case States.Zero:
        CouldDoSomethingFirst();
        goto caseZeroRedirect;
}
 

0voto

Iqbal Singh Points 15

Vous devriez essayer ceci: -

 switch (state)
{
 case States.Zero:
 case States.One:
    Console.WriteLine("1");
    break;
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X