Я пытаюсь написать несколько общих методов расширения для перечислений в стиле флага. Начиная с C # 7.3, аргумент типа TFlag может быть помечен как Enum, но компилятор выдает ошибку для выражения flags & flagToTest
, он говорит, что «Оператор» & не может быть применен для типов TFlag и TFlag. Поскольку TFlag - это Enum, оператор '&' должен нормально работать.
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;
}