Бөлісу құралы:


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

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

Причина

Тип перечисления, переданный в качестве аргумента вызову метода 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 runtime

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

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

Не подавляйте нарушения для этого правила.