【发布时间】:2012-01-01 21:59:01
【问题描述】:
我正在尝试解决一些 fxcop 问题,但我对这个问题感到非常困惑。
在派生类的 setter 中,我正在检查是否应该进行赋值
if (!(value is TypeA))
{
throw new ArgumentException("value is not of TypeA type");
}
_action = (TypeA)value;
FxCop 抱怨:
'value',一个参数,在方法中被多次转换为类型'TypeA'。缓存 'as' 运算符的结果或直接转换,以消除多余的 castclass 指令。
但是,在this 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;
【问题讨论】:
-
是的,你的想法是正确的。你觉得这有什么问题?
-
我很困惑这是否正确,因为 msdn 和我做的一样
-
在 MSDN 上有许多不被视为最佳实践的示例。有些是故意保持简单,可能是跳过输入验证。
-
是的,并非您在 MSDN 上看到的所有内容都符合 FxCop 的建议。代码的第一个 sn-p 本身并没有错误,FxCop 只是告诉你有一个更好的 方法可以做到这一点。