2013-04-26 9 views
6

Expression Treesは、BCLオブジェクト/ライブラリのコア言語機能または機能ですか? C#のコア言語機能なしで構築できないものですか?Expression TreesはC#のコア言語機能ですか?

+4

「Func 」から「式」の形式のラムダから暗黙的なキャストがある限り、コンパイラはコンパイル時に実行しなければならないと思います。 –

+1

ラムダ式を式ツリーに変換するのではなく、ビルダー・メソッドを使用できます。しかし、それは*もっと冗長*です。 – CodesInChaos

+0

この機能のどの部分をお求めですか? – SLaks

答えて

3

いいえ、式ツリーは言語機能ではありません。これらはC#固有のものではないため、任意の.NET言語から使用できます。これらは組み込みアセンブリで定義されている通常のCLR型です。

ラムダ式(およびLINQ)による構築はC#固有です。しかし、あなたは常にExpressionを手作業で作ることができます。 C#コンパイラ自体は、よく知られている静的構築メソッドExpressionへの呼び出しを出す以外に何もしません。古い.NETバージョンに設定されたReflectorを使用してバイナリを逆コンパイルすると、コンパイラが発行する内容を調べることができます。

式ツリーで.NET Frameworkの内部APIを使用するかどうかは関連性のない質問ですが、なぜ必要なのかは考えられません。

+1

"いいえ、それらは言語機能ではありません。それらはC#固有ではないように、あらゆる.NET言語から使用可能です。" - これは正しいことではありません。それらは、C#とF#、そしてVisual Basicの言語機能です。----それぞれは、ソースファイルのテキストから実際に式ツリーを作成するために、言語の構文などを知る必要があります。 –

+1

@ティモシー:いいえ、あなたは_ラムダ式を指しています_。 _これらは言語機能です。 'Expression'クラス自体は普通の.NETクラスです。 .NETクラスを使用できるものはすべて、 'Expression'クラスを使用できます。 –

+0

@JeffMercadoああ...右。元の質問は、 'Expression'クラスそのものではなく、ラムダ式から'エクスプレッション 'フィーチャに関するものだと考えていました。はい、それらは言語機能ではありません。 :) –

0

Expressionクラス定義から分かるように、それはSystem.Linq.Expressions名前空間で定義されています。これは、ExpressionはC#言語機能ではなく、CLRをターゲットとするすべての言語で使用できるクラスです。

たとえば、C#とVB.NETを使用して式ツリーを作成して使用する方法を示すMSDNの記事 "Expression Trees (C# and Visual Basic)"があります。

関連する問題