Expression<TDelegate> クラス

定義

厳密に型指定されたラムダ式を、式ツリーの形式でデータ構造として表します。 このクラスは継承できません。

generic <typename TDelegate>
public ref class Expression sealed : System::Linq::Expressions::LambdaExpression
public sealed class Expression<TDelegate> : System.Linq.Expressions.LambdaExpression
type Expression<'Delegate> = class
    inherit LambdaExpression
Public NotInheritable Class Expression(Of TDelegate)
Inherits LambdaExpression

型パラメーター

TDelegate

Expression<TDelegate>が表すデリゲートの型。

継承
Expression<TDelegate>

次のコード例では、ラムダ式をデリゲートの形式で実行可能コードとして、また式ツリーの形式でデータとして表現する方法を示します。 また、 Compile メソッドを使用して、式ツリーを実行可能コードに戻す方法についても説明します。


// Lambda expression as executable code.
Func<int, bool> deleg = i => i < 5;
// Invoke the delegate and display the output.
Console.WriteLine("deleg(4) = {0}", deleg(4));

// Lambda expression as data in the form of an expression tree.
System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
// Compile the expression tree into executable code.
Func<int, bool> deleg2 = expr.Compile();
// Invoke the method and print the output.
Console.WriteLine("deleg2(4) = {0}", deleg2(4));

/*  This code produces the following output:

    deleg(4) = True
    deleg2(4) = True
*/

' Lambda expression as executable code.
Dim deleg As Func(Of Integer, Boolean) = Function(ByVal i) i < 5
' Invoke the delegate and display the output.
MsgBox(String.Format("deleg(4) = {0}", deleg(4)))

' Lambda expression as data in the form of an expression tree.
Dim expr As System.Linq.Expressions.Expression(Of Func(Of Integer, Boolean)) = Function(ByVal i) i < 5
' Compile the expression tree into executable code.
Dim deleg2 As Func(Of Integer, Boolean) = expr.Compile()
' Invoke the method and print the output.
MsgBox(String.Format("deleg2(4) = {0}", deleg2(4)))

' This code produces the following output:
'
' deleg(4) = True
' deleg2(4) = True

注釈

ラムダ式が型が Expression<TDelegate>変数、フィールド、またはパラメーターに割り当てられると、コンパイラは式ツリーを構築する命令を出力します。

Note

ラムダ式から型 Expression<D> への変換 (Visual Basic では Expression(Of D) ) は、ラムダ式から型 D デリゲートへの変換が存在する場合存在します。 ただし、ラムダ式の本体がブロックの場合など、変換が失敗する可能性があります。 つまり、デリゲートと式ツリーは、オーバーロードの解決に関して同様に動作します。

式ツリーは、ラムダ式のメモリ内データ表現です。 式ツリーは、ラムダ式の構造を透過的かつ明示的にします。 他のデータ構造と同様に、式ツリー内のデータを操作できます。

式をデータ構造として扱う機能により、API は、カスタムの方法で検査、変換、および処理できる形式でユーザー コードを受け取ることができます。 たとえば、LINQ to SQL データ アクセス実装では、この機能を使用して、式ツリーを、データベースで評価できる Transact-SQL ステートメントに変換します。

Queryable クラスで定義されている多くの標準クエリ演算子には、Expression<TDelegate>型のパラメーターが 1 つ以上あります。

Expression<TDelegate>NodeTypeLambda

Expression<TDelegate> オブジェクトを作成するには、Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>)またはLambda<TDelegate>(Expression, ParameterExpression[])メソッドを使用します。

プロパティ

名前 説明
Body

ラムダ式の本体を取得します。

(継承元 LambdaExpression)
CanReduce

ノードを単純なノードに縮小できることを示します。 これが true を返す場合は、Reduce() を呼び出して縮小形式を生成できます。

(継承元 Expression)
Name

ラムダ式の名前を取得します。

(継承元 LambdaExpression)
NodeType

この Expressionのノードの種類を返します。

(継承元 LambdaExpression)
Parameters

ラムダ式のパラメーターを取得します。

(継承元 LambdaExpression)
ReturnType

ラムダ式の戻り値の型を取得します。

(継承元 LambdaExpression)
TailCall

ラムダ式が末尾呼び出しの最適化でコンパイルされるかどうかを示す値を取得します。

(継承元 LambdaExpression)
Type

この Expression が表す式の静的な型を取得します。

(継承元 LambdaExpression)

メソッド

名前 説明
Accept(ExpressionVisitor)

このノード タイプの特定の visit メソッドにディスパッチします。 たとえば、 MethodCallExpressionVisitMethodCall(MethodCallExpression)を呼び出します。

(継承元 Expression)
Compile()

式ツリーによって記述されたラムダ式を実行可能コードにコンパイルし、ラムダ式を表すデリゲートを生成します。

Compile(Boolean)

式ツリーによって記述されたラムダ式を解釈されたコードまたはコンパイル済みコードにコンパイルし、ラムダ式を表すデリゲートを生成します。

Compile(DebugInfoGenerator)

ラムダ式を表すデリゲートを生成します。

CompileToMethod(MethodBuilder, DebugInfoGenerator)

ラムダをメソッド定義とカスタム デバッグ情報にコンパイルします。

(継承元 LambdaExpression)
CompileToMethod(MethodBuilder)

ラムダをメソッド定義にコンパイルします。

(継承元 LambdaExpression)
Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
Reduce()

このノードを単純な式に減らします。 CanReduce が true を返す場合は、有効な式を返す必要があります。 このメソッドは、それ自体を減らす必要がある別のノードを返すことができます。

(継承元 Expression)
ReduceAndCheck()

このノードを単純な式に減らします。 CanReduce が true を返す場合は、有効な式を返す必要があります。 このメソッドは、それ自体を減らす必要がある別のノードを返すことができます。

(継承元 Expression)
ReduceExtensions()

式を既知のノード型 (拡張ノードではない) に減らすか、既に既知の型である場合は式を返します。

(継承元 Expression)
ToString()

Expressionのテキスト表現を返します。

(継承元 Expression)
Update(Expression, IEnumerable<ParameterExpression>)

次のような新しい式を作成しますが、指定された子を使用します。 すべての子が同じ場合、この式が返されます。

VisitChildren(ExpressionVisitor)

ノードを減らし、縮小された式でビジター デリゲートを呼び出します。 ノードが縮小できない場合、メソッドは例外をスローします。

(継承元 Expression)

適用対象

こちらもご覧ください