3898 Stimmen

Wie kann ich int in enum umwandeln?

Wie kann ein int an eine enum in C#?

82voto

MSkuta Punkte 1510

Ich verwende dieses Codestück, um int in mein enum zu werfen:

if (typeof(YourEnum).IsEnumDefined(valueToCast)) return (YourEnum)valueToCast;
else { //handle it here, if its not defined }

Ich halte das für die beste Lösung.

1 Stimmen

Das ist gut. Ich war überrascht, dass es keine Ausnahme gibt, wenn ein ungültiger Wert in eine int-gestützte Enum gecastet wird.

0 Stimmen

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

68voto

Tawani Punkte 10880

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;
    }
}

59voto

Sébastien Duval Punkte 581

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;
    }
}

0 Stimmen

Sie geben default(T) zurück, wenn es nicht definiert ist. Wie soll das helfen, die nicht definierten zu identifizieren?

56voto

Ryan Russon Punkte 991

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%)

25 Stimmen

Das ist nützlich bei der Konvertierung aus einer Zeichenkette. Aber nicht bei der Konvertierung von einem int.

55voto

L. D. Punkte 419

Manchmal haben Sie ein Objekt zum MyEnum Typ. Wie

var MyEnumType = typeof(MyEnum);

Dann:

Enum.ToObject(typeof(MyEnum), 3)

CodeJaeger.com

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.

Powered by:

X