Expression<TDelegate> Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
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) |