Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何区分标志枚举和普通枚举的区别?_C#_Enums_Enum Flags - Fatal编程技术网

C# 如何区分标志枚举和普通枚举的区别?

C# 如何区分标志枚举和普通枚举的区别?,c#,enums,enum-flags,C#,Enums,Enum Flags,是否有任何方法可以反射测试枚举是[Flags]枚举还是常规枚举 如果枚举是标志枚举,我需要应用程序的行为稍微不同于如果它不是标志枚举。您可以通过反射测试属性是否存在: System.Attribute[] attrs = System.Attribute.GetCustomAttributes(t); var isFlags = attrs.Any(attr => attr is FlagsAttribute); 或: 您可以通过反射获取枚举的属性,并查看是否使用了FlagsAttrib

是否有任何方法可以反射测试枚举是
[Flags]枚举
还是常规
枚举


如果枚举是标志枚举,我需要应用程序的行为稍微不同于如果它不是标志枚举。

您可以通过反射测试属性是否存在:

System.Attribute[] attrs = System.Attribute.GetCustomAttributes(t);
var isFlags = attrs.Any(attr => attr is FlagsAttribute);
或:


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

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