2010-03-03 70 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