代码检查:强制转换表达式可以替换为简化的类型参数
此检查建议通过直接指定类型参数而不是在 lambda 表达式中进行强制转换,使类型转换更安全、更清晰。
在下面的示例中,在 lambda 表达式中进行 obj 强制转换存在几个问题:它可能隐藏类型转换问题,使代码更难阅读和理解, DoWork<T>() 中的 T 类型参数可以由编译器推断,从而使强制转换变得不必要。
为避免这些问题,您可以去掉强制转换,并在方法调用时直接指定类型参数。
public interface IBase;
public class Derived : IBase;
public class Sample
{
void Test(IEnumerable<Derived> obj)
{
DoWork(() => (IEnumerable<IBase>) obj);
}
void DoWork<T>(Func<IEnumerable<T>> action) { /*...*/ }
}
public interface IBase;
public class Derived : IBase;
public class Sample
{
void Test(IEnumerable<Derived> obj)
{
DoWork<IBase>(() => obj);
}
void DoWork<T>(Func<IEnumerable<T>> action) { /*...*/ }
}
最后修改日期: 2025年 9月 27日