Je me demande pourquoi une seule conversion implicite en valeur enum ne fonctionne pas de la même façon que si la conversion était en Type de système. Je ne vois pas de raison technique mais peut-être que quelqu'un de plus intelligent que moi peut me faire la lumière.Pourquoi ne puis-je pas activer une classe avec une seule conversion implicite en une énumération?
Le tableau suivant ne peut pas être compilé avec, "A value of an integral type expected"
et "Cannot implicitly convert type 'Test.En' to 'Test.Foo"
.
void test1(){
Foo f = new Foo();
switch (f) // Comment this line to compile
//switch ((En)f) // Uncomment this line to compile
{
case En.One:
break;
}
}
//////////////////////////////////////////////////////////////////
public enum En
{
One,
Two,
Three,
}
public class Foo
{
En _myEn;
public static implicit operator En(Foo f)
{
return f._myEn;
}
}
modifier de la spécification:
Le directeur type d'une instruction switch est établie par l'expression du commutateur. Si le type de l'expression du commutateur est sbyte, octet, short, ushort, int, uint, long, ulong, char, chaîne ou un type enum, alors c'est le type régissant l'instruction switch. Sinon, exactement une conversion implicite définie par l'utilisateur (§6.4) doit exister du type de l'expression du commutateur à l'un des types suivants possibles: sbyte, octet, court, ushort, int, uint, long, ulong, char, chaîne. Si aucune conversion implicite n'existe, ou si plus d'une telle conversion implicite existe, une erreur de compilation se produit.
Pour clarifier la question, pourquoi est un type ENUM pas inclus dans la liste des permis conversion implicite définies par l'utilisateur s?
cas Foo.En.One? Besoin de voir le reste de votre code mais cela ressemble à un simple cas de spécification correcte des noms de types. –
Parce que vous ne devriez pas être paresseux :) – leppie
Où est Eric Lippert quand vous avez besoin de lui? :) – jasonh