La Valeur initiale d'un Enum
J'ai une classe avec une propriété qui est un enum
L'enum est
///<summary>
///All available delivery actions
///</summary>
public enum EnumDeliveryAction
{
///<summary>
///Tasks with email delivery action will be emailed
///</summary>
Email,
///<summary>
///Tasks with SharePoint delivery action
///</summary>
SharePoint
}
Lorsque je crée une instance de cette classe, NULLE part dans le code, dois-je spécifier la valeur de l'enum champ, mais il semble que par défaut le premier élément dans la enumlist, et non pas une valeur null, ce sont les énumérations de travail? Comment est-il possible de s'assurer que l'enum obtient une sorte de valeur null si elle n'est pas définie, je ne veux pas qu'il soit défaillant à la première valeur de l'enum.
- Enum est un type de valeur, par opposition à un type de référence. Les types de référence sera par défaut à null, alors que, les types de valeur sera par défaut à une valeur. I. e. int valeur par défaut est 0, date et heure par défaut de la date minimale, etc.
Vous devez vous connecter pour publier un commentaire.
Valeur par défaut pour
enum
types est0
(qui est, par défaut, le premier élément de l'énumération). Des champs d'une classe sera initialisé à la valeur par défaut.Si vous avez besoin de représenter une inconnu valeur de l'enum, vous pouvez ajouter un élément
Unknown
avec la valeur 0. Alternativement, vous pouvez déclarer le champNullable<MyEnum>
(MyEnum?
).enum
avec le nom Aucun. Vraisemblablement, c'est votre valeur par défaut de 0. Une bonne habitude à prendre.NotSet
au lieu deUnknown
est un meilleur choix.Les énumérations sont un type de valeur, comme des entiers. Vous avez besoin de faire nullable afin de ne pas défaut à la première (ou 0-défini) membre enum.
Nullable<T>
est identique àT?
.Champs de type Enum sont initialisés à zéro; si vous ne spécifiez pas de valeurs dans un enum, ils commencent à zéro (
Email = 0
,SharePoint=1
, etc).Ainsi, par défaut, tous les champs que vous n'initialiser que vous aurez
Email
. Il est relativement courant d'ajouterNone=0
pour de tels cas, ou, alternativement, utiliserNullable<T>
; c'est à direVous devez également être sûr de ne jamais traiter votre dernière devrait valeur par défaut; c'est à dire
cela doit être:
Les meilleures pratiques (comme indiqué par l'Analyse de Code) est de toujours avoir une valeur par défaut dans votre énumérations, qui représentent un unset valeur.
Donc dans votre cas, vous pouvez avoir:
Comme un de côté, vous ne devriez pas préfixer le nom de la enum avec le protocole Enum. Vous pouvez envisager de modifier à:
Les énumérations sont des types de valeur. Types de valeur ne peut pas être null et sont initialisées à 0.
Même si votre enum n'ont pas de 0, enum variables sont initialisées à 0.
(plus tard)
Sorties - 0
Certains answerers défendent à l'aide de
Nullable<T>
pour correspondre à votre initialisation attentes. Attention de ce conseil depuisNullable<T>
est toujours une valeur de type et dispose de différents sémantique que les types de référence. Par exemple, il ne sera jamais de générer une exception de type référence nulle (c'est pas une référence).Vous pouvez commencer votre énumérations de n'importe quelle valeur (exemple 1), mais lorsqu'elles représentent une valeur de recherche dans une Base de données, en général, vous voulez qu'ils correspondent.
En général, je déclare le premier Enum comme nul ( = 0) lorsque cela a du sens de le faire, comme par la .Net Cadre des lignes directrices de Conception.
La traditionnelle approche de l'ajout d'une valeur null pour les valeurs qui ne disposent généralement pas de l'un est de déclarer votre variable d'un type nullable, c'est à dire:
Je vous conseille d'avoir une valeur None = 0 comme première valeur d'enum. De façon explicite, alors vous savez ce que c'est la valeur des autres.
Par défaut, seuls les types de référence sont les types nullables. Si vous voulez une variable à autoriser les valeurs null, vous devez définir comme nullable en utilisant le caractère"? " (pour cela, vous avez besoin de C# 2.0 ou le haut).
et dans votre classe
Mon C++ enseignant en collège (11 ans) m'a dit que l'éditeur de liens remplace enum avec leur type:
typedef static const int enum;
Ainsi, chaque fois que vous écrivez quelque chose comme
enum MY_VAL = 5;
, vous pouvez facilement le remplacer parstatic const int MY_VAL = 5;
(mais cela ne rend votre code plus...).De toute façon, la valeur par défaut d'une
int
est de 0.