2016-07-05 2 views
3

좋아요. 동료 코드가 방금 지원하기 시작한 코드가 있습니다. 필자는 이런 식으로 한 번도 해 본 적이 없지만 컴파일러가 오류로 표시하지 않았다는 것에 놀랐다. C# 배열 인덱스 유형 검사

은 기본적으로 당신이 작은 조각으로 "이상한"동작을 볼 수 있습니다

array[3/4] = 3;

이도 3/4 불구하고, 내가 생각 허용, 더블을 반환합니다. 당신이 그것을 변경하는 경우 는 :

array[3.0/4] = 3;

당신은 컴파일러 오류를 얻는다.

정수 나누기를 수행하고 정수를 반환하기 때문에 컴파일러 오류가 발생하지 않는다고 가정합니다.

+0

이 코드를 변경하시기 바랍니다. (원래 코드는 변수를 사용하고 3/4로 하드 코딩되지 않았다고 가정합니다.) 이것은 버그에 대한 초대입니다. 나는 그것을 알 수 있었으면 좋겠다. – Eli

+0

원본 코드는 실제로이 배열 [변수 * 3/4]이었고 필요한 것은 수행했지만 마음에 들지 않으며 직접 코딩하지 않았을 것입니다. –

답변

5

예, 두 부분이 모두 정수인 경우 컴파일러에서 정수 나누기를 수행합니다. 당신은 정수로 이중 분할 할 때 당신은

3/4 = 0 

를 얻을 - 당신이 배열의 유효한 인덱스가 아닌 더블 결과를 얻을.

+3

이'(3/4) .GetType()'으로 쉽게 검증 할 수 있습니다. 이것은'System.Int32'입니다. –