FXCop投射警告

时间:2010-03-03 09:52:29

标签: c# fxcop

运行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。

1 个答案:

答案 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,则会浪费测试...)