2016-07-11 4 views
0

나는이 내 C# 코드에서 자바 코드의 루프 향상된 것으로하려고오류 동안

foreach (float value in array) 
{ 
    if (float.IsInfinity(value) || float.IsNaN(value)) 
    { 
     value = 0; 
    } 
} 

그러나 반복 변수이므로 값을 수정할 권한이 없다고 말한이 오류가 있습니다. C#을 사양에서

for(int i = 0 ; i < array.Length; i++) 
{ 

    if (float.IsInfinity(array[i]) || float.IsNaN(array[i])) 
    { 
     array[i] = 0; 
    } 
} 

:

+0

처음 컴파일하는 것은 좋지 않습니다. 그것은 숨겨진 버그입니다. 자바는 당신이 그것을 쓸 수있게 해줍니다. 적어도 C#은 그것에 대해 알려줍니다. 루프 변수를 수정할 수없는 것은 좋은 규칙입니다. –

답변

2

당신은 당신이 반복자 변수를 업데이트 할 경우 루프 정상를 사용할 필요가

반복 해 변수로 읽기 전용 지역 변수에 해당

포함 된 문 위로 확장되는 범위입니다. foreach 문을 실행하는 동안 반복 변수는 반복 수행중인 요소 집합 을 나타냅니다. Embedded 문이 반복 변수 (할당 또는 ++ 및 - 연산자를 통해)을 수정하려고 시도하거나 이 반복 변수를 ref 또는 out 매개 변수로 전달하려고하면 컴파일 타임 오류가 발생합니다.

+0

foreach를 사용할 수없는 이유를 설명하는 것이 좋습니다. – toadflakz

+0

@dou BTW : Java에서는 배열의 내용도 변경되지 않습니다. – Fildor