En C# est par défaut en cas de besoin sur un interrupteur sur un enum?
J'ai vu des posts concernant C++, mais je suis demander spécifiquement pour C# .NET (4.0+).
Dans l'exemple suivant est un cas de défaut nécessaire?
public enum MyEnum : int
{
First,
Second
}
public class MyClass
{
public void MyMethod(MyEnum myEnum)
{
switch (myEnum)
{
case MyEnum.First: /* ... */ break;
case MyEnum.Second: /* ... */ break;
default: /* IS THIS NECESSARY??? */ break;
}
}
}
- Double Possible de Devrait instructions de commutation toujours contenir une clause de défaut?
Vous devez vous connecter pour publier un commentaire.
C'est une idée fausse commune que .Net les valeurs de l'enum sont limités à ceux déclarés dans l'Enum. En réalité, si elles peuvent être n'importe quelle valeur dans l'intervalle du type de base de l'enum (
int
par défaut). Par exemple, la suite est parfaitement légalCe code compile sans mises en garde et frapper aucun de vos
case
étiquettes.Maintenant, si votre code choisit de traiter ce type de scénario est une décision politique. Ce n'est pas nécessaire mais je serais certainement recommande d'en avoir un. Je préfère ajouter un
default
à chaqueswitch
sur enum j'écris spécialement pour ce scénario avec le motif suivantIl n'est pas strictement nécessaire, mais quelqu'un peut transmettre une valeur non couverts par votre enum (depuis les énumérations ne sont pas réellement limiter la plage admissible des valeurs de paramètre).
En général, je ajouter une valeur par défaut et
throw
si la valeur spécifiée est inattendu.Il n'est pas techniquement nécessaire, mais parce que vous pouvez facilement jeter une valeur de
MyEnum
s type sous-jacent (généralement de type int) à une instance deMyEnum
. Par conséquent, il est de bonne pratique pour ajouter une instruction par défaut avec unDebug.Assert()
en elle.Il n'est pas nécessaire, mais une bonne pratique que quelqu'un pourrait introduire une nouvelle énumération plus tard. Par exemple lancer une exception qui indique que "inconnu" énumération n'est pas traitée.
Pas, le cas par défaut n'est pas nécessaire.
À partir d'un code purement point de vue, il n'y a aucune obligation d'avoir un
default
cas. C'est uniquement une question de vos exigences logiques.Son besoin si vous jeté dans enum valeur indéfinie (ne sera pas lever une exception), aussi, si vous ajoutez plus de valeurs enum.