2013-03-20 21 views
13

Am I czegoś brakuje lub jest to niemożliwe, aby zwrócić wartość z funkcji lambda, takich jak ..C# lambda Funkcje: zwracania danych

Object test =() => { return new Object(); };

lub

string test =() => { return "hello"; };

I uzyskać błąd kompilacji "Nie można przekonwertować wyrażenia lambda na typ" string ", ponieważ nie jest to typ delegata".

To tak, jak ta składnia przypisuje lambdę, a nie wynik lambda, czego się nie spodziewałem. Osiągnę pożądaną funkcjonalność, przypisując funkcję do Func i wywołując ją po nazwie, ale czy to jedyny sposób?

Nie "dlaczego miałbyś to robić?" odnośnie mojego przykładu.

Z góry dziękuję!

+0

@Abstract Twoja zmiana całkowicie zmieniła pytanie, więc wycofałem je z powrotem. –

+0

@KonradRudolph: odd ... Próbowałem * usunąć 2 ostatnie linie. Dzięki za złapanie tego. :) – IAbstract

+0

Możliwy duplikat [Jak zwrócić wartość za pomocą anonimowej metody?] (Http://stackoverflow.com/questions/10520892/how-to-return-value-with-anonymous-method) – Roflo

Odpowiedz

32

Jest to możliwe, ale próbujesz przypisać wartość lambda do wartości string. - Trzeba invoke lambda:

Func<string> f =() => { return "hello"; }; 
string test = f(); 

Komunikat o błędzie rzeczywiście mówi wszystko:

Nie można przekonwertować wyrażenia lambda wpisać 'string'

... to dokładnie wydać tutaj.

Jeśli chcesz wywołać linijkę lambda - ale naprawdę: dlaczego? - Możesz to również zrobić, po prostu musisz najpierw zrobić to osobiście jako delegat:

string test = (new Func<string>(() => { return "hello"; }))(); 
+1

Przypisanie wyrażenia lambda do niejawnie wpisana zmienna nie będzie działać. – sloth

+0

@ DominicKexel Ah, bardzo prawdziwe. –

+0

Ah, to było szybkie. właśnie edytowałem moje pytanie, gdy odpowiadałeś. Czy można wywołać inline lambda zamiast przypisywać do Func ? Dzięki! –