2009-06-25 15 views

Odpowiedz

16

Wyrażenia lambdy same istnieją tylko w kodzie źródłowym. Nie mają własnego typu, dlatego kompilator zawsze nalega, aby konwertować je na określony typ.

Dlatego ten kod nie kompilacji:

// No idea what type to convert to! 
object x = y => y.Length; 

Ale to robi: wyrażenia

Func<string, int> x = y => y.Length; 

Lambda są zawsze konwertowane do obu typu delegat lub typu drzewo wyrażenie . Podobnie metody anonimowe są zawsze konwertowane na typ delegatów.

+0

+1 Dobra odpowiedź. Podoba mi się, że wyjaśniasz, w jaki sposób wyrażenia lambda są w rzeczywistości tylko cukrem składniowym dla delegata lub drzewa wyrażeń. –

4

Operacje Lambda w Linq tworzą tak zwane drzewa ekspresji. Możesz przeczytać trochę o tym here.

+4

Cóż, mogą. Lub mogą budować delegatów. To zależy od dostawcy. –

0

Jest anonimowa funkcja, która musi spełniać jakiegoś delegata. msdn Tak więc, w rzeczywistości są to egzemplarze typu delegowanego.

+2

O ile nie zostaną przekonwertowane na drzewo wyrażeń ... –

Powiązane problemy