2010-03-03 71 views
2

运行的FxCop时,我得到了以下错误:的FxCop铸造警告

CA1800:Microsoft.Performance: 'OBJ',一个变量,是投在方法 键入 '工作' 多次“的ProductsController 。详细信息(int, int)'。缓存的结果“为” 运营商或直接投以 消除冗余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

“is”运算符也是一个强制转换,就.NET而言。 – 2010-03-03 10:06:58

回答

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 ...)

+0

一个小细节:第一行应该是“Job j = obj as Job;”在Job中使用大写的J。 – 2010-03-03 10:05:03

+0

Minor nitpick:“作为工作”应该是“作为工作”;-) – 2010-03-03 10:05:50

+0

补给它,安德斯打我:P – 2010-03-03 10:06:20