2010-12-10 10 views
2

Ich habe die folgende Erklärung ab:C# explizite Initialisierung für Enum

private Enum _statusValue; 

Was würde ich wirklich sagen möchte, ist:

private Enum _statusValue = 0; 

, obwohl ich weiß, dass es überflüssig ist. Ich möchte nur die Initialisierung explizit angeben.

Aber das ist nicht erlaubt.

Gibt es eine einfache Möglichkeit, die Initialisierung für diese Art von Deklaration anzugeben?

EDIT - Lassen Sie es mich noch einmal versuchen.

Hier ist ein erfundenes/vereinfachtes Beispiel für das, was ich mache.

using System; 

namespace EnumTesting 
{ 
    public enum EFixedPhoneUsability 
    { 
     UnknownValue,  // Should not occur? 
     IsUsable,   // User is near the telephone 
     NotUsable,   // User not near the telephone 
     BeingUsed,   // Busy 
     DoNotDisturb,  // This is phone physical state, not user attitude 
     CallsForwarded  // This is phone physical state 
    } 

    public enum EMobilePhoneConnectivity 
    { 
     UnknownValue,  // Should not occur? 
     OnNetIdle,   // I.e., usable 
     OnNetBusy,   // Being used 
     NoConnection  // Turned off, in elevator or tunnel or far from civilization 
    } 

    public class Program 
    { 
     public Enum StatusValue; 

     static void Main(string[] args) 
     { 
     Program p = new Program(); 

     p.StatusValue = EMobilePhoneConnectivity.NoConnection; 

     int i = (int) (EMobilePhoneConnectivity) p.StatusValue; 

     p.StatusValue = EFixedPhoneUsability.DoNotDisturb; 

     i = (int) (EFixedPhoneUsability) p.StatusValue; 
     } 
    } 
} 

Also meine Frage ist, kann ich einen generischen Initialisierer zu dieser Aussage hinzufügen?

 public Enum StatusValue; 

ZWEITE EDIT:

Es macht nichts, habe ich den Fehler meiner Wege entdeckt, dank dieser Veröffentlichung:

How to convert from System.Enum to base integer?

Der Schlüsselsatz, der mir klar gemacht, was ich war falsch, ist dies: "Aufzählungen sind Werttypen (und intern nur durch ganzzahlige Konstanten dargestellt), während System.Enum ein Referenztyp ist".

So will ich nicht, das sagen:

private Enum _statusValue = 0; 

Ich möchte, dies sagen, was völlig in Ordnung ist:

private Enum _statusValue = null; 

Sie denen danken, die versucht zu helfen.

+0

'private Enum _statusValue' ist eine Typdefinition. Sie können eine Typdefinition nicht initialisieren. –

+0

Ich glaube nicht, dass das stimmt. Ist es nicht eine Felddefinition? Es funktioniert wie eine Felddefinition - ich kann ihm einen Wert zuweisen, indem ich eine andere Aufzählung benutze, und den Wert von ihm mithilfe eines Cast abrufen. – RenniePet

+0

@RenniePet: Sie können Ihre eigene Frage beantworten und dann akzeptieren. Auf diese Weise wird diese Frage geschlossen. – dvdvorle

Antwort

1

Meine Frage war im Grunde in Fehler. Ich hatte fälschlicherweise gedacht Enum (wie Enums) war ein Werttyp, aber es ist eigentlich ein Referenztyp.

So will ich nicht, das sagen:

private Enum _statusValue = 0; 

Ich möchte, dies sagen, was völlig in Ordnung ist:

private Enum _statusValue = null; 

Sie denen danken, die versucht zu helfen.

9

Sie immer Ihre Enum etwas anders erklären könnte und einen Standardzustand hinzufügen (das ist eigentlich suggested by Microsoft):

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

Oder einfach (automatische Nummerierung beginnt bei 0):

public enum MyEnum 
{ 
    Default, 
    One, 
    Two 
} 

Welche würden können Sie Folgendes tun:

private MyEnum _enum = MyEnum.Default; 
+0

Vielen Dank für Ihren Vorschlag, aber was ich zu tun hoffe, ist zu vermeiden, ein neues enum MyEnum einzuführen, dessen einziger Zweck es wäre, syntaktischen Zucker zu liefern, um nicht in der Lage zu sein, eine wörtliche Null zu verwenden. Ich habe meine Frage bearbeitet und erweitert, und ich würde es begrüßen, wenn Sie es sich noch einmal ansehen würden. Vielen Dank. – RenniePet

+0

Macht nichts, bitte sehen Sie meine zweite Bearbeitung meiner Frage. – RenniePet

0

Enum ist der Typ, mit dem Sie Enums erstellen. Diese

ist wie wenn man sagt:

private class _statusValue = null; 
+2

Ich sehe die Äquivalenz nicht. "Klasse" ist ein Sprachenschlüsselwort und "Enum" (oder "System.Enum") ist der Name einer Klasse. private Klasse _statusValue; gibt einen Syntaxfehler. private Enum _statusValue; ist eine akzeptable Aussage, die gut funktioniert. – RenniePet