有什么办法可以反射测试如果一个枚举是[Flags] enum
或者它是一个常规的enum
?如何区分标志枚举和普通枚举之间的区别?
如果枚举是Flags枚举,而不是Flags枚举,则需要应用程序的行为稍有不同。
有什么办法可以反射测试如果一个枚举是[Flags] enum
或者它是一个常规的enum
?如何区分标志枚举和普通枚举之间的区别?
如果枚举是Flags枚举,而不是Flags枚举,则需要应用程序的行为稍有不同。
您可以通过反射测试属性是否存在:
System.Attribute[] attrs = System.Attribute.GetCustomAttributes(t);
var isFlags = attrs.Any(attr => attr is FlagsAttribute);
或者:
var isFlags = typeof(MyEnum).GetCustomAttributes<FlagsAttribute>().Any();
参见:http://msdn.microsoft.com/en-us/library/z919e8tw(v=vs.80).aspx
[OP编辑:]
这个工作,但语法稍微有点w荣。这是正确的:
var isFlags = myEnum.GetType()
.GetCustomAttributes(typeof(FlagsAttribute), false).Any();
您可以通过反射得到枚举的属性,看看如果使用的FlagsAttribute。