2008-11-06 8 views
5

그래서 이상한 상황 : 다음C# 3.0 Func을 /있는 OrderBy 형식 유추

Func<SomeClass, int> orderByNumber = 
    currentClass => 
    currentClass.SomeNumber; 

:

someCollection.OrderBy(orderByNumber); 

이 괜찮지 만, 내가 대신하는 방법을 만들려고 orderBy가 아닌 다른 어딘가에서 사용할 수 있기 때문입니다.

private int ReturnNumber(SomeClass currentClass) 
{ 
    return currentClass.SomeNumber; 
} 

지금 내가있는 OrderBy에 그 연결하려고하면 나는 Func을 사용하는 경우

someCollection.OrderBy(ReturnNumber); 

그것은 그것을 할 수있는 같은 유형을 추론 할 수 없습니다. 마치 Func처럼 메서드 자체가 "강력하게 형식화 된"것이므로 나처럼 보인다.

사이드 참고 : 나는이 작업을 수행 할 수 있습니다 실현 :

Func<SomeClass, int> orderByNumber = ReturnNumber; 

답변

8

이것은 또한 "return-type type inference" not working on Method Groups과 관련이있을 수 있습니다.

본질적으로 일반 매개 변수가 입력 위치에만있는 경우 (Where의 경우와 같이) 메서드 그룹 변환이 제대로 작동합니다. 그러나 제네릭 매개 변수가 반환 유형 인 경우 (예 : Select 또는 OrderBy 투영) 컴파일러는 적절한 대리인 변환을 유추하지 않습니다.

8

ReturnNumber하지 방법 것이다 - 대신에, 이름과 ReturnNumber하지만 잠재적으로 다른 인수에 대응 앤 형 서명 모든 방법을 포함하는 방법기를 나타낸다. 그 방법 그룹의 어떤 방법을 실제로 매우 일반적인 방법으로 사용하고 싶은지 파악하는 데 기술적 인 문제가 있습니다. 분명히, 컴파일러 일 수 있습니다. 그러나 대부분의 경우, 컴파일러에 알고리즘을 넣는 것이 절반 만 시간이 걸리는 것은 나쁜 생각이었습니다. 그러나

다음 작품 :

someCollection.OrderBy(new Func<SomeClass, int>(ReturnNumber)) 
+0

방법 그룹은 내가 생각하지 않은 무언가이다. 두 가지 답을 표시 할 수 있기를 바랍니다. –