无法对泛型枚举参数应用'&'运算符



我正在尝试为标志样式的枚举编写一些通用扩展方法。从 C# 7.3 开始,TFlag 类型参数可以标记为 Enum,但编译器为表达式flags & flagToTest抛出错误,它说"运算符'&'不能应用于类型 TFlag 和 TFlag"。由于 TFlag 是一个枚举,因此"&"运算符应该可以正常工作。

public static bool IsSet<TFlag>(this TFlag flags, TFlag flagToTest) where TFlag : Enum
{
if (!Attribute.IsDefined(typeof(TFlag), typeof(FlagsAttribute)))
throw new InvalidOperationException("The given enum type is not decorated with Flag attribute.");
if (flagToTest.Equals(0)) 
throw new ArgumentOutOfRangeException(nameof(flagToTest), "Value must not be 0");
return (flags & flagToTest) == flagToTest;
}

首先,看看这个答案 https://stackoverflow.com/a/50219294/6064728。 你可以这样或类似的东西来编写你的函数:

public static bool IsSet<TFlag>(this TFlag flags, TFlag flagToTest) where TFlag : Enum
{
if (!Attribute.IsDefined(typeof(TFlag), typeof(FlagsAttribute)))
throw new InvalidOperationException("The given enum type is not decorated with Flag attribute.");
if (flagToTest.Equals(0)) throw new ArgumentOutOfRangeException(nameof(flagToTest), "Value must not be 0");
int a = Convert.ToInt32(flags);
int b = Convert.ToInt32(flagToTest);
return (a & b) == b;
}

相关内容

  • 没有找到相关文章

最新更新