2009-07-21 13 views
5

Visual Studio 2008を使用していて、.NET 2.0アプリケーションをターゲットにしている場合でも、ラムダ式を使用できますか?ラムダ式の私の理解は、フレームワークではなくコンパイラに組み込まれた機能なので、私の結論は.NET 2.0アプリケーションでラムダを使うことができるということです。これがそうであれば誰かに教えてもらえますか?VB.NETラムダ式

答えて

12

はいこれは完全にサポートされています。式ツリーを構築したり、System.Core、System.Xml.Linqなどを参照しない限り、ラムダ式をターゲット2.0アプリケーションで使用することは完全に正当です。これは、VS2008(VB9)で導入された他のコンパイラ機能にも当てはまります。

EDIT

いくつかの答えが間違ってラムダ式は、3.5または3.0の機能の特徴であることを述べます。ラムダ式は、フレームワークではないコンパイラ機能です。それらは機能するためにフレームワークサポートを必要とせず、2.0に向けられたアプリケーションでそれらを使用することは完全に合法です。

問題が発生する唯一の場所は、ラムダを式ツリーとして使用した場合です。式ツリーはコンパイラとフレームワークの両方の機能であり、正しく機能するには3.5が必要です。しかし、私たちが積極的に起こらないようにするためには、これを可能にするために懸命に働かなければなりません。

-3

動作しません。 Linqを使用するには、System.Linqが.NET 2.0にはないフレームワークアセンブリの一部である必要があります。

+0

うん、ダンダンの権利。また、3.5アセンブリをビンに入れて参照することはできません。私は尋ねました...問題は、System名前空間にも多くの変更があったことです。 – andy

+0

これは当てはまりません。 LINQは、3.5コンパイラ(Vb9)を使用して、SelectとWhereなどの十分に利用可能なLINQメソッドを用意している場合は、2.0アプリケーションを対象とすることが最も確実にサポートされています。 C#の場合も同様です – JaredPar

2

はい、あなたは正しいです。匿名メソッドの代わりにラムダ式を使用できます。コンパイラは残りの部分をソートします。これを試してください:あなたが行うことができない何

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

は、.NET 3.5の新機能のいずれかを使用することである(すなわちLINQの。)。そうするためには、.Net 2.0にはないSystem.Linq、System.Coreなどへの参照を追加する必要があります。