如何区分Flags enum和普通枚举?

时间:2013-02-28 09:03:42

标签: c# enums enum-flags

有没有办法反复测试枚举是[Flags] enum还是常规enum

如果枚举是一个标志枚举,那么我需要应用程序的行为略有不同,而不是它不是标志枚举。

2 个答案:

答案 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。