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

本文关键字:枚举 Flags 何区 | 更新日期: 2023-09-27 18:01:36

是否有任何方法可以反思性地测试枚举是[Flags] enum还是常规enum ?

我需要应用程序的行为稍微不同,如果枚举是一个Flags enum与如果它不是一个Flags enum

如何区分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编辑:)

可以工作,但是语法有点错误。这是正确的:

var isFlags = myEnum.GetType()
    .GetCustomAttributes(typeof(FlagsAttribute), false).Any();

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