通过


添加显式强制转换(IDE0221)

财产 价值
规则 ID IDE0221
标题 添加显式强制转换
类别 样式
子类别 语言规则(表达式级首选项)
适用的语言 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

若要禁用所有代码样式规则,请在Style将类别 none 的严重性设置为

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

有关详细信息,请参阅 如何禁止显示代码分析警告

另见