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;
TypeA tmpAction = value as TypeA;
if(tmpAction == null)
{
throw new ArgumentException();
}
你给出的例子是正确的 - 如果你需要强制转换并使用具有你转换到的类型变量,请使用as
和null
检查而不是is
这样你就不必执行两次。
您应该使用 as
运算符的解决方案。 请注意,如果TypeA
是值类型,则无法执行此操作,as
仅适用于引用类型。