2010-03-03 6 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과 관련해서는 캐스트입니다. –

답변

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); 
    } 
} 

을 (또는 선언하고 obj 경우 테스트를 낭비하는, 이전 p를 초기화 실제로는 Job ...)

+0

사소한 세부 사항 : 첫 번째 줄은 "Job j = obj as Job;"이어야합니다. 욥기에서 자본화 된 J로. –

+0

사소한 nitpick : "as job"은 "as job"이어야합니다 .- –

+0

아빠가 저를 때려 눕 힙니다. P –