运行 FXCop 时出现以下错误:
CA1800:微软。性能:
'obj',一个变量,被转换为类型
方法中多次“Job”
'ProductsController.Details(int,
int)'。缓存“as”的结果
运算符或直接强制转换以便
消除多余的castclass
操作说明
Code:
object obj = repository.GetJobOrPlace(jobId);//Returns (object) place or (object) product
if (obj != null)
{
if (obj is Job)
{
Job j = (Job) obj;
Debug.WriteLine(j.Title);
}
else if (obj is Place)
{
Place p = (Place) obj;
Debug.WriteLine(p.Title);
}
}
这有什么问题吗?我只能看到一种转换:Job j = (Job) obj。
只有一个cast但还有一个test。因此,您可以将第一个块替换为:
Job j = obj as Job;
if (j != null)
{
Debug.WriteLine(j.Title);
}
这意味着执行时间测试只需执行一次,而不是两次。这是一个微观优化 - 在你的情况下,它会让代码变得有点混乱,正如你所需要的:
Job j = obj as Job;
if (j != null)
{
Debug.WriteLine(j.Title);
}
else
{
Place p = obj as Place;
if (p != null)
{
Debug.WriteLine(p.Title);
}
}
(或者声明并初始化p
更早,这会浪费测试如果obj
实际上是一个Job
...)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)