2012-08-23 2 views
-1

나는 단지 알고 싶어, 왜 id === 연산자는 C#에서 사용할 수 없습니다?. 사용할 수없는 이유가 있습니까? C#에서 === 연산자와 같은 점은 무엇입니까? 왜냐하면 identity 연산자 ===가 equal == 연산자보다 빠릅니다. == 연산자가 데이터 유형을 일시적으로 변경하기 때문입니다.왜 identity === 연산자는 C#에서 사용할 수 없습니까?

업데이트 : 차이점은 ===== 연산자입니다. === 기본적으로 두 변수를 임시 데이터 형식으로 변환하지 않지만 == equal은 변환 된 변수의 데이터 형식을 일시적으로 변환합니다.

+0

아무도 요청하지 않았거나 구현하는 데 시간을 투자하는 것이 중요하지 않기 때문에 존재하지 않습니다. 그 운영자가 무엇을 기대합니까? –

+0

나는 왜이 질문에 투표해야할지 모르겠다. ... – MilkyWayJoe

+3

C#이 엄격하게 입력 되었기 때문에 === 당신은 필요 없다. 두 가지 데이터 유형의 변수를 먼저 공통 유형으로 변환하지 않고 비교하는 것을 의미합니다. – zeal

답변

6

ReferenceEquals이 있기 때문에.

값 유형이 동등 함보다 우선합니다.

JavaScript와 달리 C#은 "진실"및 "거짓"값을 가지지 않으므로 암시 적 변환이 잘 정의되어 있습니다.

요약하면 JavaScript와 달리 C#에서는 필요하지 않기 때문에 존재하지 않습니다.

+0

나는 182k가 나와 내게 응답하는 사람이 여전히 나를 투표한다고 생각한다. –

+4

@DotNetDreamer - 두 사람이 서로 어떻게해야하는지 설명해 주시겠습니까? – Oded

+0

@Oded'ReferenceEquals'는'==='와 동등하지 않습니다. – Matthew

2

이것은 PHP/javascript가 동적 유형 지정 언어이고 C-Sharp가 정적 유형이기 때문에 발생합니다.

C#으로

if (5 == '5') ... // compile error, incompatible types 

편집

가 정교하지만

if (5 == '5') ... // is true 
if (5 === '5') ... // is false 

(PHP에서) 예를 들어, 유형의 많은 암시 적 변환 (즉, 문자열이 없습니다 vs ints), 컴파일 에러가 발생하지만, 암시 적 변환 (ints vs floats)이있는 경우에는 비슷한 유형의 비교를 수행합니다. y 그럴 수있어.

float x = 1.0f; 
int y = 1; 

if (x == y) ... // is true 
if (x == y && x.GetType() == y.GetType()) ... // is false 
+0

"약식 입력"! = "동적 입력". 서로 다른 타입 사이의'=='은 약한 타입의 언어로 모든 종류의 파손을 실제로 일으킬 수 있습니다. C에서, 예를 들어, 포인터를 숫자와 비교할 수 있습니다. – cHao

+0

@cHao 당신 말이 맞아요, 업데이트 중입니다 ... – Matthew

관련 문제