FXCop投射警告

Car*_*rra 2 c# fxcop

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

Jon*_*eet 6

只有一个演员,但也有一个测试.所以你可以用以下代码替换第一个块:

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...... 那会浪费测试)