In .NET Core und .NET> 4 gibt es eine generische Analysemethode :
Enum.TryParse("Active", out StatusEnum myStatus);
Dies schließt auch die neuen Inline- out
Variablen von C # 7 ein , also die Try-Parse, die Konvertierung in den expliziten Aufzählungstyp und die Initialisierung + Auffüllung der myStatus
Variablen.
Wenn Sie Zugriff auf C # 7 und das neueste .NET haben, ist dies der beste Weg.
Ursprüngliche Antwort
In .NET ist es ziemlich hässlich (bis 4 oder höher):
StatusEnum MyStatus = (StatusEnum) Enum.Parse(typeof(StatusEnum), "Active", true);
Ich neige dazu, dies zu vereinfachen mit:
public static T ParseEnum<T>(string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
Dann kann ich tun:
StatusEnum MyStatus = EnumUtil.ParseEnum<StatusEnum>("Active");
Eine in den Kommentaren vorgeschlagene Option ist das Hinzufügen einer Erweiterung, die einfach genug ist:
public static T ToEnum<T>(this string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
StatusEnum MyStatus = "Active".ToEnum<StatusEnum>();
Schließlich möchten Sie möglicherweise eine Standardaufzählung verwenden, wenn die Zeichenfolge nicht analysiert werden kann:
public static T ToEnum<T>(this string value, T defaultValue)
{
if (string.IsNullOrEmpty(value))
{
return defaultValue;
}
T result;
return Enum.TryParse<T>(value, true, out result) ? result : defaultValue;
}
Was dies zum Aufruf macht:
StatusEnum MyStatus = "Active".ToEnum(StatusEnum.None);
Ich würde jedoch vorsichtig sein, wenn ich eine Erweiterungsmethode wie diese hinzufüge, string
da (ohne Namespace-Kontrolle) in allen Fällen string
angezeigt wird, ob sie eine Aufzählung enthalten oder nicht (dies 1234.ToString().ToEnum(StatusEnum.None)
wäre gültig, aber unsinnig). Es ist oft am besten, die Kernklassen von Microsoft nicht mit zusätzlichen Methoden zu überladen, die nur in ganz bestimmten Kontexten gelten, es sei denn, Ihr gesamtes Entwicklungsteam hat ein sehr gutes Verständnis für die Funktionsweise dieser Erweiterungen.