2013-03-06 2 views
2

나는 나의 배열을 정렬하려면이 코드를했고, 난 그냥 작동하지 않는 정렬 실현 :왜 OrderBy 버그로 인해 컴파일러 경고가 표시되지 않습니까?

if(desc)items.OrderByDescending(x=>x.ExpirationDate); 
else items.OrderBy(x=>x.ExpirationDate); 

올바른 코드는 다음과 같습니다

if(desc)items=items.OrderByDescending(x=>x.ExpirationDate).ToArray(); 
else items=items.OrderBy(x=>x.ExpirationDate).ToArray(); 

그러나 컴파일러 왜 그랬는지 (나는 모두를 사용하고 있습니다 Mono 및 Visual C# 2010) 나에게 오류 또는 경고를주지 않습니까? 일부 설정이 누락되었거나 C# 컴파일러가 원래 코드가 쓸모 없다는 것을 깨닫는 것이 불가능합니까? 후자의 경우, 이와 같은 특정 실수를 찾아 볼 수있는 보푸라기 도구가 있습니까?이를 컴파일에 추가 할 수 있습니까?

답변

5

오류가 없으므로 반환 값을 사용하지 않으면 컴파일러가 신경 쓸 필요가 없습니다.

자세한 내용은 다음을 참조하십시오. JetBrains - ReShaper

7

함수를 호출하고 결과를 무시하는 것은 완전히 유효합니다. 컴파일러는 특정 함수가 순수하거나 부작용이 있는지 알지 못합니다.

그런 경우에는 오류/경고가 없다고 생각합니다. 일반적으로 무시하는 결과로 호출 된 함수 호출의

샘플 : Dictionary.Remove는 - 실제로 거의 모든 다른 Dictionary/List 기능과는 달리 true/false를 반환합니다.

관련 문제