我有几个枚举,第一个都带有名称“ Default”。
现在我有一个函数,我只能得到一个onject作为参数,所以如何检查该对象是否设置为枚举的第一个条目?
我只知道如何检查它是否是枚举,而不是什么值它有。
答案 0 :(得分:1)
这样的事情会帮助我惊呆
public static bool IsFirstEnum<T>(T enumVal) where T: System.Enum
{
return enumVal.Equals(default(T));
}
PS:请记住,默认的Enum元素是使用最低的Flag(最好是0)Ref
定义的例如:enum Day {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
,其中星期六是默认值
例如:enum Day {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
,其中gat Sat是默认值
例如:enum Day {Sat=1, Sun=0, Mon, Tue, Wed, Thu, Fri};
,其中Sun是默认的
如果您打算使用“默认”关键字,则
public static bool IsDefaultEnum<T>(T enumVal) where T: System.Enum
{
var val = typeof(T).GetField("Default").GetValue(enumVal);
return val.Equals(enumVal);
}
答案 1 :(得分:1)
如果所有这些默认值均为零(这是正常值),则可以将其强制转换为int
并与零进行比较。对于给定的枚举类型,这也与default
相同。
如果没有,并且您想使用名称"Default"
作为确定特征,则可以使用。
Enum.Parse(typeof(MyEnum), "Default")
返回等于MyEnum.Default
的对象,依此类推。
要获取第一个定义的值,您将需要使用:
typeof(MyEnum).GetFields(BindingFlags.Static | BindingFlags.Public).First().GetValue(null);
我不确定是否可以保证第一个定义的值将保持顺序中的第一个,但目前可以这样工作。
答案 2 :(得分:-2)
您可以将int值转换为Enum值(并反转),默认Enum值始终为0。
您可以通过检查其int值来检查返回的枚举是否为默认值:
if((int)EnumVal == 0)
{return "Enum is default";}
反之亦然,您可以通过反之亦然来检查默认值:
EnumName default = (EnumName)0;