运行FXCop时出现以下错误:
CA1800:Microsoft.Performance: 'obj',一个变量,被转换为类型 方法中多次“工作” “ProductsController.Details(INT, INT)”。缓存'as'的结果 操作员或直接演员以便 消除冗余的castclass 指令
代码:
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。
答案 0 :(得分:6)
只有一个演员,但也有一个测试。所以你可以用:
替换第一个块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
,则会浪费测试...)