| 财产 | 价值 |
|---|---|
| 规则 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
有关详细信息,请参阅 如何禁止显示代码分析警告。