Udostępnij za pośrednictwem


Expression<TDelegate> Klasa

Definicja

Reprezentuje silnie typizowane wyrażenie lambda jako strukturę danych w postaci drzewa wyrażeń. Klasa ta nie może być dziedziczona.

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, który Expression<TDelegate> reprezentuje.

Dziedziczenie
Expression<TDelegate>

Przykłady

Poniższy przykład kodu pokazuje, 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 przypisywane do zmiennej, pola lub parametru, którego typem jest Expression<TDelegate>, kompilator emituje instrukcje tworzenia drzewa wyrażeń.

Uwaga

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 delegata 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 sposób niestandardowy. Na przykład implementacja dostępu do danych LINQ to SQL używa tej funkcji do tłumaczenia drzew wyrażeń na instrukcje Języka 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>.

Element NodeType to Expression<TDelegate>Lambda.

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

Właściwości

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 Expression reprezentuje.

(Odziedziczone po LambdaExpression)

Metody

Accept(ExpressionVisitor)

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

(Odziedziczone po Expression)
Compile()

Kompiluje wyrażenie lambda opisane przez drzewo wyrażeń w kodzie wykonywalnym i tworzy delegata, który reprezentuje wyrażenie lambda.

Compile(Boolean)

Kompiluje wyrażenie lambda opisane przez drzewo wyrażeń w interpretowanym lub skompilowanym kodzie i tworzy delegata, który reprezentuje wyrażenie lambda.

Compile(Boolean)

Tworzy interpretowany lub skompilowany delegat reprezentujący wyrażenie lambda.

(Odziedziczone po LambdaExpression)
Compile(DebugInfoGenerator)

Tworzy delegata, który reprezentuje wyrażenie lambda.

Compile(DebugInfoGenerator)

Tworzy delegata, który reprezentuje wyrażenie lambda.

(Odziedziczone po LambdaExpression)
CompileToMethod(MethodBuilder)

Kompiluje lambda w definicji metody.

(Odziedziczone po LambdaExpression)
CompileToMethod(MethodBuilder, DebugInfoGenerator)

Kompiluje lambda do definicji metody i niestandardowych informacji debugowania.

(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()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
MemberwiseClone()

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

(Odziedziczone po Object)
Reduce()

Zmniejsza ten węzeł do prostszego wyrażenia. Jeśli funkcja CanReduce zwróci wartość true, powinna zwrócić prawidłowe wyrażenie. Ta metoda może zwrócić inny węzeł, który musi zostać zmniejszony.

(Odziedziczone po Expression)
ReduceAndCheck()

Zmniejsza ten węzeł do prostszego wyrażenia. Jeśli funkcja CanReduce zwróci wartość true, powinna zwrócić prawidłowe wyrażenie. Ta metoda może zwrócić inny węzeł, który musi zostać zmniejszony.

(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ę obiektu Expression.

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

Tworzy nowe wyrażenie, które jest 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ż