И наоборот, возможно ... наоборот;) Расширить int и строку с помощью универсальных методов расширения , которые будут принимать в качестве параметра типа тип перечисления:
public static TEnum ToEnum<TEnum>(this int val)
{
return (TEnum) System.Enum.ToObject(typeof(TEnum), val);
}
public static TEnum ToEnum<TEnum>(this string val)
{
return (TEnum) System.Enum.Parse(typeof(TEnum), val);
}
Использование:
var redFromInt = 141.ToEnum<System.Drawing.KnownColor>();
var redFromString = "Red".ToEnum<System.Drawing.KnownColor>();
К сожалению, для Enums нет общего ограничения, поэтому мы должны проверять тип TEnum во время выполнения; для упрощения мы оставим эту проверку для методов Enum.ToObject
и Enum.Parse
.