2009-07-21 17 views
5

Jeśli mam program Visual Studio 2008 i wybieram aplikację .NET 2.0, czy nadal mogę używać wyrażeń Lambda? Moje rozumienie wyrażeń Lambda polega na tym, że jest to funkcja wbudowana w kompilator, a nie framework, więc moim wnioskiem byłoby, że mógłbym użyć Lambda w aplikacji .NET 2.0. Czy ktoś może mi powiedzieć, czy tak jest?Wyrażenia VB.NET Lambda

Odpowiedz

12

Tak, jest to całkowicie obsługiwane. Dopóki nie budujesz drzewa wyrażeń lub w inny sposób nie odwołujesz się do System.Core, System.Xml.Linq itp., Używanie wyrażeń Lambda w aplikacji docelowej 2.0 jest całkowicie legalne. Dotyczy to każdej innej funkcji kompilatora wprowadzonej w VS2008 (VB9).

EDIT

Kilka odpowiedzi nieprawidłowo stwierdzić, że Lambda Expressions są cechą funkcji 3.5 lub 3.0. Wyrażenia lambdy są funkcją kompilującą, a nie ramową. Nie wymagają one obsługi ramowej w celu działania, a używanie ich w aplikacji skierowanej do wersji 2.0 jest całkowicie legalne.

Jedynym miejscem, w którym można wpaść w kłopoty, jest użycie lambda jako drzewa wyrażeń. Wyrażenia Drzewa są zarówno kompilatorem, jak i funkcją szkieletową i wymagają 3.5, aby działały poprawnie. Musisz jednak ciężko pracować, aby to umożliwić, ponieważ aktywnie staramy się temu zapobiec.

-3

To nie działa. Użycie Linq wymaga, aby System.Linq był częścią zestawu ramowego, którego nie ma .NET 2.0.

+0

Tak, dandan ma rację. Ponadto, nie można odwoływać się do zestawów 3.5, po prostu umieszczając je w koszu. Pytałem ... Problemem jest też wiele zmian w przestrzeni nazw Systemu. – andy

+0

Tak nie jest. LINQ jest najprawdopodobniej obsługiwany przy użyciu kompilatora 3.5 (Vb9) w celu kierowania do aplikacji 2.0, pod warunkiem, że masz wystarczająco dostępne metody LINQ, takie jak Select i Where. Prawda także dla C# – JaredPar

2

Tak, masz rację. Zamiast metod anonimowych można używać wyrażeń lambda. Kompilator uporządkuje resztę. Wypróbuj to:

int sum = 0; 
Array.ForEach(new[] {1, 2, 3, 4}, x => sum += x); 

Nie możesz użyć żadnej z nowych funkcji .Net 3.5 (np. Linq). Takie postępowanie wymaga dodania odniesień do System.Linq, System.Core, itp .., które nie są obecne w .Net 2.0.