2

如果枚举是 a[Flags] enum还是常规的,有什么方法可以反射性地测试enum

如果枚举是 Flags 枚举,我需要应用程序的行为略有不同,如果它不是 Flags 枚举。

4

2 回答 2

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

[操作编辑:]

这行得通,但语法略有错误。这是对的:

var isFlags = myEnum.GetType()
    .GetCustomAttributes(typeof(FlagsAttribute), false).Any();
于 2013-02-28T09:05:38.020 回答
1

可以通过反射获取枚举的属性,看看是否使用了FlagsAttribute。

于 2013-02-28T09:05:39.457 回答