Добавление явного приведения (IDE0221)

Недвижимость Ценность
Идентификатор правила IDE0221
Заголовок Добавьте явное приведение
Категория Style
Подкатегории Языковые правила (предпочтения уровня выражений)
Применимые языки C#
Параметры dotnet_style_prefer_non_hidden_explicit_cast_in_source

Обзор

Это правило помечает явные приведения типов в исходном коде, где компилятор вставляет дополнительные скрытые явные приведения. Видимые и скрытые приведения могут завершиться ошибкой во время выполнения по разным причинам. Если это правило отмечает такой код, рекомендуется явно добавить промежуточное приведение в исходный код, чтобы было ясно, что делает код.

Например, если вы пишете (Derived)x, где x является типом, для которого требуются два явных преобразования — сначала в базовый тип, а затем в производный тип — в исходном коде отображается только одно приведение. Компилятор вставляет промежуточное преобразование типов без каких-либо указаний в исходном коде. Это правило предполагает явное написание обоих приведения: (Derived)(Base)x

Опции

Параметры указывают поведение, которое вы хотите, чтобы правило применяло. Сведения о настройке параметров см. в разделе "Формат параметров".

dotnet_style_prefer_non_hidden_explicit_cast_in_source

Недвижимость Ценность Описание
Имя параметра dotnet_style_prefer_non_hidden_explicit_cast_in_source
Значения параметра true Предпочтительно сделать все промежуточные явные преобразования видимыми в исходном коде.
false Не предпочитайте делать все промежуточные явные приведения видимыми в исходном коде.
Значение параметра по умолчанию true

Пример

class Base { }
class Derived : Base { }

class Castable
{
    public static explicit operator Base(Castable c) => new Base();
}

class C
{
    void M()
    {
        // Code with violation: the compiler inserts a hidden (Base) cast.
        var v = (Derived)new Castable();

        // Fixed code: both casts are explicit in source.
        var v2 = (Derived)(Base)new Castable();
    }
}

Отключение предупреждений

Если вы хотите отключить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

#pragma warning disable IDE0221
// The code that's violating the rule is on this line.
#pragma warning restore IDE0221

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

[*.cs]
dotnet_diagnostic.IDE0221.severity = none

Чтобы отключить все правила стиля кода, задайте уровень серьезности для категории Stylenone в файле конфигурации.

[*.cs]
dotnet_analyzer_diagnostic.category-Style.severity = none

Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".

См. также