运行FXCop时出现以下错误:
CA1800:Microsoft.Performance:'obj',一个变量,在方法'ProductsController.Details(int,int)'中被多次强制输入'Job'.缓存'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);
}
}
Run Code Online (Sandbox Code Playgroud)
这有什么问题?我只能看到一个演员阵容:Job j =(Job)obj.
只有一个演员,但也有一个测试.所以你可以用以下代码替换第一个块:
Job j = obj as Job;
if (j != null)
{
Debug.WriteLine(j.Title);
}
Run Code Online (Sandbox Code Playgroud)
这意味着执行时间测试只需执行一次,而不是两次.这是一个微优化 - 在你的情况下,它会使代码有点麻烦,因为你需要:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
(或者先声明并初始化p,如果obj实际上是Job...... 那会浪费测试)