Udostępnij za pośrednictwem


Expression<TDelegate> Klasa

Definicja

Reprezentuje silnie typizowane wyrażenie lambda jako strukturę danych w postaci drzewa wyrażeń. Tej klasy nie można dziedziczyć.

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

Parametry typu

TDelegate

Typ delegata Expression<TDelegate> , który reprezentuje.

Dziedziczenie
Expression<TDelegate>

Przykłady

W poniższym przykładzie kodu pokazano, jak reprezentować wyrażenie lambda zarówno jako kod wykonywalny w postaci delegata, jak i jako dane w postaci drzewa wyrażeń. Pokazuje również, jak przekształcić drzewo wyrażeń z powrotem w kod wykonywalny przy użyciu Compile metody .


// 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

Uwagi

Gdy wyrażenie lambda jest przypisane do zmiennej, pola lub parametru, którego typem jest Expression<TDelegate>, kompilator emituje instrukcje tworzenia drzewa wyrażeń.

Note

Konwersja z wyrażenia lambda na typ Expression<D> (Expression(Of D) w Visual Basic) istnieje, jeśli istnieje konwersja z wyrażenia lambda na delegat typu D . Jednak konwersja może zakończyć się niepowodzeniem, na przykład jeśli treść wyrażenia lambda jest blokiem. Oznacza to, że delegaty i drzewa wyrażeń zachowują się podobnie w odniesieniu do rozpoznawania przeciążeń.

Drzewo wyrażeń jest reprezentacją danych w pamięci wyrażenia lambda. Drzewo wyrażeń sprawia, że struktura wyrażenia lambda jest przezroczysta i jawna. Możesz wchodzić w interakcje z danymi w drzewie wyrażeń tak samo jak w przypadku dowolnej innej struktury danych.

Możliwość traktowania wyrażeń jako struktur danych umożliwia interfejsom API odbieranie kodu użytkownika w formacie, który można sprawdzić, przekształcić i przetworzyć w niestandardowy sposób. Na przykład implementacja dostępu do danych LINQ to SQL używa tej funkcji do tłumaczenia drzew wyrażeń na instrukcje Transact-SQL, które mogą być oceniane przez bazę danych.

Wiele standardowych operatorów zapytań zdefiniowanych w Queryable klasie ma co najmniej jeden parametr typu Expression<TDelegate>.

Wartość NodeType elementu Expression<TDelegate> to Lambda.

Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) Użyj metody lubLambda<TDelegate>(Expression, ParameterExpression[]), aby utworzyć Expression<TDelegate> obiekt.

Właściwości

Nazwa Opis
Body

Pobiera treść wyrażenia lambda.

(Odziedziczone po LambdaExpression)
CanReduce

Wskazuje, że węzeł można zmniejszyć do prostszego węzła. Jeśli zwraca wartość true, funkcja Reduce() może zostać wywołana w celu utworzenia skróconej postaci.

(Odziedziczone po Expression)
Name

Pobiera nazwę wyrażenia lambda.

(Odziedziczone po LambdaExpression)
NodeType

Zwraca typ węzła tego Expressionelementu .

(Odziedziczone po LambdaExpression)
Parameters

Pobiera parametry wyrażenia lambda.

(Odziedziczone po LambdaExpression)
ReturnType

Pobiera zwracany typ wyrażenia lambda.

(Odziedziczone po LambdaExpression)
TailCall

Pobiera wartość wskazującą, czy wyrażenie lambda zostanie skompilowane przy użyciu optymalizacji wywołań końcowych.

(Odziedziczone po LambdaExpression)
Type

Pobiera statyczny typ wyrażenia, które reprezentuje Expression .

(Odziedziczone po LambdaExpression)

Metody

Nazwa Opis
Accept(ExpressionVisitor)

Wysyła do określonej metody visit dla tego typu węzła. Na przykład MethodCallExpression wywołuje metodę VisitMethodCall(MethodCallExpression).

(Odziedziczone po Expression)
Compile()

Kompiluje wyrażenie lambda opisane przez drzewo wyrażeń w kodzie wykonywalnym i tworzy delegat reprezentujący wyrażenie lambda.

Compile(Boolean)

Kompiluje wyrażenie lambda opisane przez drzewo wyrażeń w interpretowanym lub skompilowanym kodzie i tworzy delegat reprezentujący wyrażenie lambda.

Compile(DebugInfoGenerator)

Tworzy delegata reprezentującego wyrażenie lambda.

CompileToMethod(MethodBuilder, DebugInfoGenerator)

Kompiluje lambda do definicji metody i niestandardowych informacji debugowania.

(Odziedziczone po LambdaExpression)
CompileToMethod(MethodBuilder)

Kompiluje lambda w definicji metody.

(Odziedziczone po LambdaExpression)
Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Pobiera Type bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Object.

(Odziedziczone po Object)
Reduce()

Zmniejsza ten węzeł do prostszego wyrażenia. Jeśli funkcja CanReduce zwraca wartość true, powinno to zwrócić prawidłowe wyrażenie. Ta metoda może zwrócić inny węzeł, który należy zmniejszyć.

(Odziedziczone po Expression)
ReduceAndCheck()

Zmniejsza ten węzeł do prostszego wyrażenia. Jeśli funkcja CanReduce zwraca wartość true, powinno to zwrócić prawidłowe wyrażenie. Ta metoda może zwrócić inny węzeł, który należy zmniejszyć.

(Odziedziczone po Expression)
ReduceExtensions()

Zmniejsza wyrażenie do znanego typu węzła (który nie jest węzłem rozszerzenia) lub po prostu zwraca wyrażenie, jeśli jest już znanym typem.

(Odziedziczone po Expression)
ToString()

Zwraca tekstową reprezentację elementu Expression.

(Odziedziczone po Expression)
Update(Expression, IEnumerable<ParameterExpression>)

Tworzy nowe wyrażenie podobne do tego, ale przy użyciu dostarczonych elementów podrzędnych. Jeśli wszystkie elementy podrzędne są takie same, zwróci to wyrażenie.

VisitChildren(ExpressionVisitor)

Zmniejsza węzeł, a następnie wywołuje delegata gościa w wyrażeniu zredukowanym. Metoda zgłasza wyjątek, jeśli węzeł nie jest reducible.

(Odziedziczone po Expression)

Dotyczy

Zobacz też