FxCop在如何消除多余的castclass方面感到困惑

本文关键字:方面感 castclass 多余 何消 FxCop | 更新日期: 2023-09-27 18:19:07

我正在尝试解决一些fxcop问题,我对这个问题感到非常困惑。

在派生类的集合器中,我正在检查是否应该进行赋值

if (!(value is TypeA))
{
    throw new ArgumentException("value is not of TypeA type");
}
_action = (TypeA)value;

FxCop抱怨:

">

value"是一个参数,在方法中多次强制转换为类型"TypeA"。缓存"as"运算符或直接强制转换的结果,以消除冗余的castclass指令。

但是,在这个msdn示例中(is定义(,我看到这个:

if (o is Class1)
{
    Console.WriteLine("o is Class1");
    a = (Class1)o;
}

这与我所做的完全相同。那么,有解决方案吗?

我能想到的就是:

TypeA tmpAction = value as TypeA;
if(tmpAction == null)
{
    throw new ArgumentException();
}
_action = tmpAction;

FxCop在如何消除多余的castclass方面感到困惑

TypeA tmpAction = value as TypeA;
if(tmpAction == null)
{
    throw new ArgumentException();
}

你给出的例子是正确的 - 如果你需要强制转换并使用具有你转换到的类型变量,请使用asnull检查而不是is这样你就不必执行两次。

您应该使用 as 运算符的解决方案。 请注意,如果TypeA是值类型,则无法执行此操作,as仅适用于引用类型。