2012-06-26 4 views
0

가능한 중복 :
What is wrong in comparing a null with an object rather than an object with a null
널 (null) == 목적 == null의 대 개체

나는 다음과 같은 Null 개체를 사용하는 일부 개발자가 C#으로 확인을 참조하십시오 :

if (null == myObject) 
{ 

} 

다음보다 :

if (myObject == null) 
{ 

} 

필자는 왼쪽에서 오른쪽으로 자연스럽게 읽는 두 번째 문장을 선호합니다.

첫 번째 이유가 사용 된 이유가 있습니까? 성능상의 이점이 있습니까 아니면 순수한 맛입니까?

+4

아무 것도 없습니다. 나는 두 번째 자신을 선호한다. – Dimitri

+1

비슷한 문제가 있습니다. .equals (myString)와는 대조적으로 myString.equals (""); 두 번째 변수는 null 변수에서 함수를 호출하지 않으려 고합니다. myString은 null 일 수 있고 첫 번째 것은 충돌하지만 equals (null)은 충돌을 일으키지 않습니다. –

+0

"yoda 조건"("null, my object is"에서와 같이)이라고하는 것을 들었습니다. –

답변

10

어떤 사람들 (대부분 C 개발자)는 첫 번째 방법을 선호;

int a = 0; 

if(a=1) //Accidental assignment, luckily the C# compiler warns us for this. The C compiler wouldnt. 
{ 

}  
if(1=a) // This is not logical, and not valid in either C# or C. 
{ 

} 

그러나 C와 달리 C#에서는 int가 부울로 암시 적으로 캐스팅된다는 점이 Jamietre가 지적했습니다. 컴파일러는 여전히 오류를 생성합니다. 그러나 그것은 다음과 같이 부울을 비교할 때 작동합니다 : if(a == true). 그러나 그 자체로는 다소 이상한데, 내 의견으로는 == true을 생략 할 수 있습니다.

+4

C#도 컴파일되지 않습니다. 이 점을 감안할 때, 대부분의 사람들을위한 코드를 읽는 것이 더 자연스럽고 위험이 없기 때문에, 테스트하는 것을 처음 퍼팅하는 것이 C#에서 더 낫다고 생각합니다. (하지만 물론 둘 중 하나가 완벽하게 유효합니다 ... 기본 설정으로 내려갑니다.) –

+0

고마워, 사이드 노트를 추가했습니다. – TJHeuvel

+0

음, 아니, C#에서 첫 번째도 컴파일되지 않습니다. 컴파일러는 "그 라인에서 'int'타입을 'bool'타입으로 암묵적으로 변환 할 수 없습니다. –

0

순수한 맛, 혼수, 괄호 등과 동일.

2

순수한 맛. 둘 다 똑같은 것을 돌려 줄 것입니다. 당신은 내가 한 =를 잊어 버린 경우 코드가 실 거예요, C. 예를 들어

컴파일 한 = 기호를 잊어 버린 경우 때문에