未能在枚举上使用FlagsAttribute(无法解析符号';HasFlag';)

本文关键字:符号 HasFlag 枚举 FlagsAttribute | 更新日期: 2023-09-27 18:28:19

我在c#中有一个asmx web服务,最近发现了非常有用的用于枚举的FlagsAttribute。我的声明如下:

[Flags] 
public enum eAdPriority
{
    None = 0,
    Gold = 1,
    Silver = 2,
    Homepage = 4
}

然后我测试枚举如下:

eAdPriority test = eAdPriority.Gold | eAdPriority.Homepage | eAdPriority.Silver;
test.HasFlag(eAdPriority.Gold);

但是,最后一行的HasFlag部分突出显示为红色无法解析符号"HasFlag",我的代码无法编译。有什么想法吗?

未能在枚举上使用FlagsAttribute(无法解析符号';HasFlag';)

Enum.HasFlag仅在.NET Framework 4.0或更高版本中可用。如果您使用的是.NETFramework3.5,则可以包含本文中的扩展方法来模拟HasFlag功能。为了完整起见,以下是代码(归功于文章作者):

    public static bool HasFlag(this Enum variable, Enum value)
    {
        // check if from the same type.
        if (variable.GetType() != value.GetType())
        {
            throw new ArgumentException("The checked flag is not from the same type as the checked variable.");
        }
        Convert.ToUInt64(value);
        ulong num = Convert.ToUInt64(value);
        ulong num2 = Convert.ToUInt64(variable);
        return (num2 & num) == num;
    }