CA2248: укажите правильный аргумент перечисления для Enum.HasFlag

Свойство Значение
Идентификатор правила CA2248
Заголовок укажите правильный аргумент enum для Enum.HasFlag
Категория Использование
Исправление является критическим или не критическим Не критическое
Включен по умолчанию в .NET 8 Как предложение

Причина

Тип перечисления, переданный в качестве аргумента вызову метода HasFlag, отличается от вызывающего типа перечисления.

Описание правила

Метод Enum.HasFlag принимает аргумент enum того же типа enum, что и экземпляр, в котором вызывается метод. Если это разные типы enum, во время выполнения будет создано необработанное исключение.

Устранение нарушений

Чтобы устранить нарушения, используйте один и тот же тип перечисления как для аргумента, так и для вызывающего объекта:

public class C
{
    [Flags]
    public enum MyEnum { A, B, }

    [Flags]
    public enum OtherEnum { A, }

    public void Method(MyEnum m)
    {
        m.HasFlag(OtherEnum.A); // Enum types are different, this call will cause an `ArgumentException` to be thrown at run time

        m.HasFlag(MyEnum.A); // Valid call
    }
}

Когда лучше отключить предупреждения

Не отключайте предупреждения для этого правила.