2010-12-10 90 views
2

J'ai fait la déclaration suivante:C# initialisation explicite pour Enum

private Enum _statusValue; 

Ce que je voudrais vraiment dire est:

private Enum _statusValue = 0; 

même si je sais qu'il est redondant. C'est juste que j'aime spécifier explicitement l'initialisation.

Mais ce n'est pas autorisé.

Existe-t-il un moyen simple de spécifier l'initialisation sur ce type de déclaration?

EDIT - Laissez-moi essayer à nouveau.

Voici un exemple simplifié/simplifié de ce que je fais. Donc, ma question est: est-ce que je peux ajouter un initialiseur générique à cette déclaration? Oui.

 public Enum StatusValue; 

EDIT SECOND:

Jamais esprit, je l'ai découvert l'erreur de mes moyens, grâce à cette annonce:

How to convert from System.Enum to base integer?

La phrase clé, ce qui m'a fait réaliser ce que je faisait mal, est-ce: "les énumérations sont des types de valeurs (et représentées en interne uniquement par des constantes entières) alors que System.Enum est un type de référence".

Je ne veux pas dire ceci:

private Enum _statusValue = 0; 

Je veux dire, ce qui est parfaitement valide:

private Enum _statusValue = null; 

Merci à ceux qui ont essayé d'aider.

+0

'private Enum _statusValue' est une définition de type. Vous ne pouvez pas initialiser une définition de type. –

+0

Je ne pense pas que ce soit correct. N'est-ce pas une définition de champ? Cela fonctionne comme une définition de champ - je peux lui assigner une valeur en utilisant une autre énumération, et en extraire la valeur à l'aide d'un cast. – RenniePet

+0

@RenniePet: vous pouvez répondre à votre propre question, puis l'accepter. De cette façon, cette question se ferme. – dvdvorle

Répondre

1

Ma question était fondamentalement erronée. J'avais cru à tort qu'Enum (comme enums) était un type de valeur, mais c'est en fait un type de référence.

Je ne veux pas dire ceci:

private Enum _statusValue = 0; 

Je veux dire, ce qui est parfaitement valide:

private Enum _statusValue = null; 

Merci à ceux qui ont essayé d'aider.

9

Vous pouvez toujours déclarer votre Enum un peu différemment et ajouter un état par défaut (qui est en fait suggested by Microsoft):

public enum MyEnum 
{ 
    Default = 0, 
    One = 1, 
    Two = 2 
} 

Ou simplement (numérotation automatique commence à 0):

public enum MyEnum 
{ 
    Default, 
    One, 
    Two 
} 

Ce qui serait vous permet d'effectuer les opérations suivantes:

private MyEnum _enum = MyEnum.Default; 
+0

Merci pour votre suggestion, mais ce que j'espère faire est d'éviter d'introduire une nouvelle énumération MyEnum dont le seul but serait de fournir du sucre syntaxique pour ne pas pouvoir utiliser un zéro littéral. J'ai édité et développé ma question, et j'apprécierais que vous y jetiez un coup d'oeil. Merci. – RenniePet

+0

Peu importe, s'il vous plaît voir mon deuxième edit à ma question. – RenniePet

0

Enum est le type que vous utilisez pour créer des énumérations.

Cela revient à dire:

private class _statusValue = null; 
+2

Je ne vois pas l'équivalence. "class" est un mot-clé de langue, et "Enum" (ou "System.Enum") est le nom d'une classe. classe privée _statusValue; donne une erreur de syntaxe. Enum privé _statusValue; est une déclaration acceptable qui fonctionne bien. – RenniePet