Expression<TDelegate> Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt einen stark typierten Lambda-Ausdruck als Datenstruktur in Form einer Ausdrucksstruktur dar. Diese Klasse kann nicht vererbt werden.
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
Typparameter
- TDelegate
Der Typ der Stellvertretung, die sie Expression<TDelegate> darstellt.
- Vererbung
Beispiele
Im folgenden Codebeispiel wird veranschaulicht, wie ein Lambda-Ausdruck sowohl als ausführbarer Code in Form eines Delegaten als auch als Daten in Form einer Ausdrucksstruktur dargestellt wird. Außerdem wird veranschaulicht, wie die Ausdrucksstruktur mithilfe der Compile Methode wieder in ausführbaren Code umgewandelt wird.
// 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
Hinweise
Wenn einem Lambda-Ausdruck eine Variable, ein Feld oder einen Parameter zugewiesen wird, deren Typ lautet Expression<TDelegate>, gibt der Compiler Anweisungen zum Erstellen einer Ausdrucksstruktur aus.
Note
Eine Konvertierung von einem Lambda-Ausdruck in typ Expression<D> (Expression(Of D) in Visual Basic) ist vorhanden, wenn eine Konvertierung vom Lambda-Ausdruck in einen Delegat des Typs D vorhanden ist. Die Konvertierung kann jedoch fehlschlagen, z. B. wenn der Textkörper des Lambda-Ausdrucks ein Block ist. Dies bedeutet, dass sich Stellvertretungen und Ausdrucksstrukturen in Bezug auf die Überladungsauflösung ähnlich verhalten.
Die Ausdrucksstruktur ist eine Speicherdatendarstellung des Lambda-Ausdrucks. Die Ausdrucksstruktur macht die Struktur des Lambda-Ausdrucks transparent und explizit. Sie können mit den Daten in der Ausdrucksstruktur genauso wie mit jeder anderen Datenstruktur interagieren.
Die Möglichkeit, Ausdrücke als Datenstrukturen zu behandeln, ermöglicht APIs das Empfangen von Benutzercode in einem Format, das überprüft, transformiert und auf benutzerdefinierte Weise verarbeitet werden kann. Beispielsweise verwendet die LINQ to SQL-Datenzugriffsimplementierung diese Einrichtung, um Ausdrucksstrukturen in Transact-SQL Anweisungen zu übersetzen, die von der Datenbank ausgewertet werden können.
Viele in der Queryable Klasse definierte Standardabfrageoperatoren verfügen über einen oder mehrere Parameter vom Typ Expression<TDelegate>.
Das NodeType von einem Expression<TDelegate> ist Lambda.
Verwenden Sie die Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) Methode, Lambda<TDelegate>(Expression, ParameterExpression[]) um ein Expression<TDelegate> Objekt zu erstellen.
Eigenschaften
| Name | Beschreibung |
|---|---|
| Body |
Ruft den Textkörper des Lambda-Ausdrucks ab. (Geerbt von LambdaExpression) |
| CanReduce |
Gibt an, dass der Knoten auf einen einfacheren Knoten reduziert werden kann. Wenn dies "true" zurückgibt, kann "Reduce()" aufgerufen werden, um die reduzierte Form zu erzeugen. (Geerbt von Expression) |
| Name |
Ruft den Namen des Lambda-Ausdrucks ab. (Geerbt von LambdaExpression) |
| NodeType |
Gibt den Knotentyp dieses Typs Expressionzurück. (Geerbt von LambdaExpression) |
| Parameters |
Ruft die Parameter des Lambda-Ausdrucks ab. (Geerbt von LambdaExpression) |
| ReturnType |
Ruft den Rückgabetyp des Lambda-Ausdrucks ab. (Geerbt von LambdaExpression) |
| TailCall |
Ruft den Wert ab, der angibt, ob der Lambda-Ausdruck mit der Tail-Aufrufoptimierung kompiliert wird. (Geerbt von LambdaExpression) |
| Type |
Ruft den statischen Typ des Ausdrucks ab, der dies Expression darstellt. (Geerbt von LambdaExpression) |
Methoden
| Name | Beschreibung |
|---|---|
| Accept(ExpressionVisitor) |
Verteilt an die spezifische Besuchsmethode für diesen Knotentyp. Ruft z. B. MethodCallExpression die VisitMethodCall(MethodCallExpression). (Geerbt von Expression) |
| Compile() |
Kompiliert den lambda-Ausdruck, der durch die Ausdrucksstruktur beschrieben wird, in ausführbaren Code und erzeugt einen Delegaten, der den Lambda-Ausdruck darstellt. |
| Compile(Boolean) |
Kompiliert den lambda-Ausdruck, der von der Ausdrucksstruktur in interpretierten oder kompilierten Code beschrieben wird, und erzeugt einen Delegaten, der den Lambda-Ausdruck darstellt. |
| Compile(DebugInfoGenerator) |
Erzeugt einen Delegaten, der den Lambda-Ausdruck darstellt. |
| CompileToMethod(MethodBuilder, DebugInfoGenerator) |
Kompiliert die Lambda-Funktion in einer Methodendefinition und benutzerdefinierten Debuginformationen. (Geerbt von LambdaExpression) |
| CompileToMethod(MethodBuilder) |
Kompiliert die Lambda-Funktion in einer Methodendefinition. (Geerbt von LambdaExpression) |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
| GetHashCode() |
Dient als die Standard-Hashfunktion (Geerbt von Object) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| Reduce() |
Reduziert diesen Knoten auf einen einfacheren Ausdruck. Wenn CanReduce "true" zurückgibt, sollte dieser einen gültigen Ausdruck zurückgeben. Diese Methode kann einen anderen Knoten zurückgeben, der selbst reduziert werden muss. (Geerbt von Expression) |
| ReduceAndCheck() |
Reduziert diesen Knoten auf einen einfacheren Ausdruck. Wenn CanReduce "true" zurückgibt, sollte dieser einen gültigen Ausdruck zurückgeben. Diese Methode kann einen anderen Knoten zurückgeben, der selbst reduziert werden muss. (Geerbt von Expression) |
| ReduceExtensions() |
Reduziert den Ausdruck auf einen bekannten Knotentyp (der kein Erweiterungsknoten ist) oder gibt nur den Ausdruck zurück, wenn er bereits ein bekannter Typ ist. (Geerbt von Expression) |
| ToString() |
Gibt eine Textdarstellung der Expression. (Geerbt von Expression) |
| Update(Expression, IEnumerable<ParameterExpression>) |
Erstellt einen neuen Ausdruck, der wie dieser ist, aber die bereitgestellten untergeordneten Elemente verwenden. Wenn alle untergeordneten Elemente gleich sind, wird dieser Ausdruck zurückgegeben. |
| VisitChildren(ExpressionVisitor) |
Reduziert den Knoten und ruft dann den Besucherdelegat für den reduzierten Ausdruck auf. Die Methode löst eine Ausnahme aus, wenn der Knoten nicht reducierbar ist. (Geerbt von Expression) |