这是我几年前写的一个扩展方法中的一个简洁的小 sn-p。将 TryParse 与 IsDefined 相结合,一举完成所有操作并处理枚举中不存在的值。
if (value != null)
{
TEnum result;
if (Enum.TryParse(value.ToString(), true, out result))
{
// since an out-of-range int can be cast to TEnum, double-check that result is valid
if (Enum.IsDefined(typeof(TEnum), result.ToString() ?? string.Empty))
{
return result;
}
}
}
这是整数值的扩展
public static TEnum ParseToEnum<TEnum>(this int value, TEnum? defaultValue = null, bool useEnumDefault = false) where TEnum : struct
{
return ParseToEnumInternal(value, defaultValue, useEnumDefault);
}
还有一种用法
public enum Test
{
Value1 = 1,
Value2 = 3
}
var intValue = 1;
var enumParsed = intValue.ParseToEnum<Test>(); // converts to Test.Value1
intValue = 2;
enumParsed = intValue.ParseToEnum<Test>(); // either throws or converts to supplied default
enumParsed = 3.ParseToEnum<Test>(); // converts to Test.Value2
有些人不喜欢它如何悬挂在(可能为空的)值的末尾,但我有一个扩展可以处理可空类型(int?)的空值,我自己喜欢它,所以 ...
如果您有兴趣,我可以发布带有所有重载的整个扩展方法的要点。