ReSharper 2025.2 Help

代码检查:强制转换表达式可以替换为显式变量类型

C 风格的强制转换表达式在 C# 中既可以是静态向上转换,也可以是动态向下转换,两者的语法相同。 如果不考虑类型层次结构,就无法判断强制转换是安全的向上转换还是运行时的向下转换。 此外,在重构过程中,静态向上转换可能会意外地变成动态向下转换。 为了避免这些问题并使代码更健壮,此检查建议在可能的情况下使用显式类型替代强制转换。

interface IBase; interface IDerived : IBase; class Derived : IDerived; class Sample { public Sample() { var derivedInstance = new Derived(); // upcast: var baseReference = (IBase) derivedInstance; // downcast: var derivedReference = (IDerived) baseReference; } }
interface IBase; interface IDerived : IBase; class Derived : IDerived; class Sample { public Sample() { var derivedInstance = new Derived(); // implicit upcast: IBase baseReference = derivedInstance; // downcast: var derivedReference = (IDerived) baseReference; } }

如果 baseReference 的初始化方式使 derivedInstance 变量更改其类型以至于不再与 IBase 兼容,则无法编译。

最后修改日期: 2025年 9月 27日