Próbuję dowiedzieć się, czy istnieje prosta składnia do konwersji grupy metod na wyrażenie. Wydaje się dość łatwo z lambda, ale nie przekłada się metodami:Konwertuj grupę metod na wyrażenie
Given
public delegate int FuncIntInt(int x);
wszystkie wymienione poniżej obowiązują:
Func<int, int> func1 = x => x;
FuncIntInt del1 = x => x;
Expression<Func<int, int>> funcExpr1 = x => x;
Expression<FuncIntInt> delExpr1 = x => x;
Ale jeśli próbuję samo ze związkiem Metoda instancji rozkłada się na Wyrażenia:
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
Obie z dwóch ostatnich nie kompilują się z "C nie konwertuj grupy metodowej "AFuncIntInt" na nieprzydzielone typu "System.Linq.Expressions.Expression < ...>". Czy zamierzają wywołać metodę?”
Więc jest to dobry składnia do przechwytywania metoda A Grou w wyrażeniu?
dzięki, Arne
Dooh .. Teraz czuję się głupio. To działa idealnie. Dzięki –
Czy kiedykolwiek znalazłeś ładniejszą składnię tego? Nie do końca rozumiem, dlaczego kompilator nie może obliczyć grupy metod Wyrażenia> kiedy może to zrozumieć dla Func .. –
skrebbel
Moje założenie jest takie, że foo.AFuncIntInt jest grupą metod, a nie wyrażeniem i nie ma automatycznych konwersji z grupy metod do wyrażenia, jednak istnieje automatyczna konwersja, aby zaakceptować lambdę jako grupę metod lub wyrażenie –