2012-01-01 2 views
2

일부 fxcop 문제를 해결하려고하는데이 문제에 대해 정말 혼란 스럽습니다.FxCop이 중복 캐스트 클래스를 제거하는 방법을 혼동합니다.

'값', 매개 변수, 입력 캐스팅 'TYPEA을 : 할당이

if (!(value is TypeA)) 
{ 
    throw new ArgumentException("value is not of TypeA type"); 
} 

_action = (TypeA)value; 

의 FxCop는 불평하게 할 필요가있는 경우 파생 클래스의 세터에서

, 나는 확인하고 '방법으로 여러 번. 잉여 castclass 명령어를 제거하기 위해 'as'연산자 또는 직접 형 변환의 결과를 캐시하십시오. 나는이 볼 this MSDN 예 ( is 정의)에

하지만, : 정확히 내가 같은 일이다

if (o is Class1) 
{ 
    Console.WriteLine("o is Class1"); 
    a = (Class1)o; 
} 

. 그래서, 이것에 대한 해결책이 있습니까?

내가 생각할 수있는 모든

은 다음과 같습니다

TypeA tmpAction = value as TypeA; 
if(tmpAction == null) 
{ 
    throw new ArgumentException(); 
} 

_action = tmpAction; 
+0

네가 생각한 것은 정확하다. 그게 잘못이라고 생각하니? –

+0

msdn이 내가하는 것과 똑같기 때문에 그것이 올바른지 혼란 스럽습니다. – Odys

+0

MSDN에는 모범 사례로 간주되지 않는 많은 예제가 있습니다. 일부는 입력 유효성 검사를 건너 뜀으로써 의도적으로 단순하게 유지됩니다. – TrueWill

답변

4
TypeA tmpAction = value as TypeA; 
if(tmpAction == null) 
{ 
    throw new ArgumentException(); 
} 

당신이주는 예제가 정확한지 - 당신이 캐스팅하고, as을 사용하는 주조 유형과 대신 null 검사와 변수를 사용해야하는 경우 is이므로 두 번 할 필요가 없습니다.

3

as 연산자를 사용하는 솔루션이 무엇을해야합니다. TypeA이 값 유형 인 경우 as이 참조 유형에만 적용될 수 있으므로이 작업을 수행 할 수 없습니다.