我有一些枚举,第一个枚举的名称为“默认”。
现在我有一个函数,我只获取一个对象作为参数,那么如何检查该对象是否设置为枚举的第一个条目?
我只知道如何检查它是否是一个枚举,但不知道它有什么值。
这样的事情会帮助我猜测
public static bool IsFirstEnum<T>(T enumVal) where T: System.Enum
{
return enumVal.Equals(default(T));
}
PS:请记住,默认 Enum 元素首先使用最低标志(最好是 0)定义 Ref
例如:
enum Day {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
,其中周六是默认值 enum Day {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
其中 Sat 是默认值 enum Day {Sat=1, Sun=0, Mon, Tue, Wed, Thu, Fri};
,其中 Sun 又是默认值
如果您打算使用“Defaul”关键字,那么
public static bool IsDefaultEnum<T>(T enumVal) where T: System.Enum
{
var val = typeof(T).GetField("Default").GetValue(enumVal);
return val.Equals(enumVal);
}
如果所有这些默认值都为零(这是常态),那么您可以直接转换为
int
并与零进行比较。对于给定的枚举类型,这也与 default
相同。
如果没有,并且您想使用名称
"Default"
作为决定特征,那么您可以使用。
Enum.Parse(typeof(MyEnum), "Default")
返回一个等于
MyEnum.Default
的对象等等。
要获取第一个定义值,您需要使用:
typeof(MyEnum).GetFields(BindingFlags.Static | BindingFlags.Public).First().GetValue(null);
我不确定是否保证第一个定义的值仍按顺序保持在第一个,但目前是这样工作的。
下面的扩展方法在我看来更令人满意,因为它不需要反射。
public static bool IsDefaultEnumValue<TEnum>(TEnum value) where TEnum : struct, Enum
{
return EqualityComparer<TEnum>.Default.Equals(value, default);
}
您可以将 int 值转换为 Enum 值(以及相反),默认 Enum 值始终为 0。
您可以通过检查其 int 值来检查返回的枚举是否为默认值:
if((int)EnumVal == 0)
{return "Enum is default";}
相反,您可以通过相反的方式检查默认值:
EnumName default = (EnumName)0;