有没有办法反复测试枚举是[Flags] enum
还是常规enum
?
如果枚举是一个标志枚举,那么我需要应用程序的行为略有不同,而不是它不是标志枚举。
答案 0 :(得分:4)
您可以通过反射测试属性是否存在:
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编辑:]
这有效,但语法略有错误。这是正确的:
var isFlags = myEnum.GetType()
.GetCustomAttributes(typeof(FlagsAttribute), false).Any();
答案 1 :(得分:1)
您可以使用反射获取枚举的属性,并查看是否使用了FlagsAttribute。