메소드 그룹을 표현식으로 변환하기위한 간단한 구문이 있는지 알아 내려고하고 있습니다. 그것은 람다 충분히 쉽게 보이지만 방법에 번역하지 않습니다메소드 그룹을 표현식으로 변환
public delegate int FuncIntInt(int x);
을 감안할 때 모두 아래 유효합니다
Func<int, int> func1 = x => x;
FuncIntInt del1 = x => x;
Expression<Func<int, int>> funcExpr1 = x => x;
Expression<FuncIntInt> delExpr1 = x => x;
하지만 난은과 같은 시도하는 경우 인스턴스 메서드를 사용하면 식에서 분해됩니다.
Foo foo = new Foo();
Func<int, int> func2 = foo.AFuncIntInt;
FuncIntInt del2 = foo.AFuncIntInt;
Expression<Func<int, int>> funcExpr2 = foo.AFuncIntInt; // does not compile
Expression<FuncIntInt> delExpr2 = foo.AFuncIntInt; //does not compile
마지막 두 개는 모두 "C 메서드 그룹 'AFuncIntInt'를 'System.Linq.Expressions.Expression <>>'대리자가 아닌 형식으로 변환하십시오. 당신은 메소드를 호출하려고 했습니까? "
그래서 표현의 방법 GROU를 캡처 좋은 구문이?
감사 아르네을
Dooh .. 나는 지금 어리 석다. 그건 완벽하게 작동합니다. 감사합니다 –
당신은 이것에 대한 더 좋은 구문을 찾았습니까? 컴파일러가 Func에 대해 알아낼 수있는 Expression >의 메서드 그룹을 알아 내지 못하는 이유를 완전히 이해하지 못합니다. –
skrebbel
내 생각에 foo.AFuncIntInt는식이 아닌 메서드 그룹입니다. 메소드 그룹에서 표현식으로의 자동 변환은 없지만 메소드 그룹 또는 표현식으로 람다를 허용하는 자동 변환이 있습니다. –