Wie erstelle ich eine Enumeration mit einem Nullwertinitialisieren Enum mit einem Nullwert
ex:
public enum MyEnum
{
[StringValue("X")]
MyX,
[StringValue("Y")]
MyY,
None
}
wo Wert Keiner ist null oder String.Empty
Wie erstelle ich eine Enumeration mit einem Nullwertinitialisieren Enum mit einem Nullwert
ex:
public enum MyEnum
{
[StringValue("X")]
MyX,
[StringValue("Y")]
MyY,
None
}
wo Wert Keiner ist null oder String.Empty
Sie können wie etwas versuchen dies: -
public MyEnum? value= null;
oder Sie können versuchen, diese: -
public MyEnum value= MyEnum.None;
Obwohl seine Frage danach fragt antworte es nicht, was er gefragt hat. –
Ich denke, das OP bittet darum, dass ein Mitglied einer Enum einen "Null" -Wert hat. – Oded
@jsobo was sie fragen ist unmöglich; das ist gut als Antwort IMO –
Alle enum-Typen Werttypen sind und die verschiedenen Elemente sind auch aus den Elementtypen (die zulässigen Typen sind byte
, sbyte
, short
, ushort
, int
, uint
, long
oder ulong
- wie documented) abgeleitet.
Dies bedeutet, dass Mitglieder einer Enumeration nicht null
sein können.
Eine Möglichkeit, mit einem Standard-enum
Wert zu behandeln ist, den None
Wert als der erste Wert zu setzen und es auf einen negativen Wert (für signierte Aufzählungen) oder 0
Einstellung.
public enum MyEnum
{
[StringValue(null)]
None = -1,
[StringValue("X")]
MyX,
[StringValue("Y")]
MyY
}
Sie können einen null
Verweis auf eine Aufzählung haben, wenn Sie eine Nullable-Instanz deklarieren - myenum?
.
Der Wert None sollte immer einen Wert von 0 haben. – erikkallen
@erikkallen - Warum sollte es immer 0 sein. Es könnte auch -1 sein, es könnte eigentlich um jeden Wert, der in der gegebenen Situation eigentlich kein realer Wert sein kann. –
Da der Standardinitialisierer einer Enumeration die Enumeration auf '(MyEnum) 0 'setzt. [FxCop stimmt zu] (http://msdn.microsoft.com/en-us/library/ms182149 (v = vs.80) .aspx). Vielleicht sollte aber keiner der Standard sein, z. Wenn Sie eine Liste mit "negativen Optionen" haben, sollte "Alle" der Standardwert sein. – erikkallen
Verwenden Sie das "?" oeprator für einen NULL-fähigen Typ !!
public MyEnum? myEnum= null;
Es gibt keine "Aufzählung mit Nullwert". Eine Aufzählung in C# ist nur eine benannte Ganzzahl. In Ihrem Fall ist None
nur ein Alias für 2
(der Vollständigkeit halber MyX
ist 0
und MyY
ist 1
). Der zugrunde liegende Datentyp einer Aufzählung ist standardmäßig int
, aber es können auch andere ganzzahlige Basistypen unterschiedlicher Größe/Vorzeichen verwendet werden.
Wenn Sie eine "Null" enum möchten, müssten Sie MyEnum?
, aka Nullable<MyEnum>
verwenden.
Wie alle anderen Antworten gesagt, können Sie nicht einen Enum-Wert null haben. Was Sie können tun ist ein Description
Attribut hinzufügen (wie StringValue
), die einen Nullwert hat.
Zum Beispiel:
public enum MyEnum
{
[Description(null)]
None = 0,
[Description("X")]
MyX,
[Description("Y")]
MyY
}
Sie können die Beschreibung des Enum mit der folgenden Funktion erhalten:
public static string GetEnumDescription(Enum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes =
(DescriptionAttribute[])fi.GetCustomAttributes(
typeof(DescriptionAttribute),
false);
if (attributes != null && attributes.Length > 0)
return attributes[0].Description;
else
return value.ToString();
}
Verbrauch:
MyEnum e = MyEnum.None;
string s2 = GetEnumDescription((MyEnum)e); // This returns null
'[String ("")] 'oder' [StringValue (null)] 'funktioniert nicht? – Rawling
nicht es nicht: S –
Mögliches Duplikat von [Wie Enum auf Null setzen] (http://stackoverflow.com/questions/4337193/how-to-set-enum-to-null) –