Wie kann ein int
an eine enum
in C#?
Das ist gut. Ich war überrascht, dass es keine Ausnahme gibt, wenn ein ungültiger Wert in eine int-gestützte Enum gecastet wird.
Das ist gut. Ich war überrascht, dass es keine Ausnahme gibt, wenn ein ungültiger Wert in eine int-gestützte Enum gecastet wird.
Dies unterscheidet sich eigentlich nicht so sehr von der am besten bewerteten Antwort. Diese Antwort behandelt auch die Verwendung von Enum.IsDefined, nachdem Sie die Zeichenfolge in den Enum-Typ gecastet haben. Also auch wenn die Zeichenfolge ohne Fehler gecastet wurde, wird Enum.IsDefined noch fangen es
Nachfolgend finden Sie eine schöne Utility-Klasse für Enums
public static class EnumHelper
{
public static int[] ToIntArray<T>(T[] value)
{
int[] result = new int[value.Length];
for (int i = 0; i < value.Length; i++)
result[i] = Convert.ToInt32(value[i]);
return result;
}
public static T[] FromIntArray<T>(int[] value)
{
T[] result = new T[value.Length];
for (int i = 0; i < value.Length; i++)
result[i] = (T)Enum.ToObject(typeof(T),value[i]);
return result;
}
internal static T Parse<T>(string value, T defaultValue)
{
if (Enum.IsDefined(typeof(T), value))
return (T) Enum.Parse(typeof (T), value);
int num;
if(int.TryParse(value,out num))
{
if (Enum.IsDefined(typeof(T), num))
return (T)Enum.ToObject(typeof(T), num);
}
return defaultValue;
}
}
Für numerische Werte ist dies sicherer, da es in jedem Fall ein Objekt zurückgibt:
public static class EnumEx
{
static public bool TryConvert<T>(int value, out T result)
{
result = default(T);
bool success = Enum.IsDefined(typeof(T), value);
if (success)
{
result = (T)Enum.ToObject(typeof(T), value);
}
return success;
}
}
Wenn Sie bereit sind für die 4.0 .NET Framework, gibt es eine neue Enum.TryParse() Funktion, die sehr nützlich ist und gut mit dem Attribut [Flags] zusammenarbeitet. Siehe Enum.TryParse Methode (String, TEnum%)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.