Expression<TDelegate> Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rappresenta un'espressione lambda fortemente tipizzata sotto forma di struttura di dati sotto forma di albero delle espressioni. Questa classe non può essere ereditata.
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
Parametri di tipo
- TDelegate
Tipo del delegato rappresentato da Expression<TDelegate> .
- Ereditarietà
Esempio
Nell'esempio di codice seguente viene illustrato come rappresentare un'espressione lambda sia come codice eseguibile sotto forma di delegato che come dati sotto forma di albero delle espressioni. Viene inoltre illustrato come ripristinare l'albero delle espressioni in codice eseguibile usando il Compile metodo .
// 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
Commenti
Quando un'espressione lambda viene assegnata a una variabile, a un campo o a un parametro il cui tipo è Expression<TDelegate>, il compilatore genera istruzioni per compilare un albero delle espressioni.
Annotazioni
Esiste una conversione da un'espressione lambda a un tipo Expression<D> (Expression(Of D) in Visual Basic) se esiste una conversione dall'espressione lambda a un delegato di tipo D . Tuttavia, la conversione potrebbe non riuscire, ad esempio se il corpo dell'espressione lambda è un blocco. Ciò significa che i delegati e gli alberi delle espressioni si comportano in modo analogo rispetto alla risoluzione dell'overload.
L'albero delle espressioni è una rappresentazione dei dati in memoria dell'espressione lambda. L'albero delle espressioni rende la struttura dell'espressione lambda trasparente ed esplicita. È possibile interagire con i dati nell'albero delle espressioni esattamente come è possibile con qualsiasi altra struttura di dati.
La possibilità di trattare le espressioni come strutture di dati consente alle API di ricevere codice utente in un formato che può essere ispezionato, trasformato ed elaborato in modo personalizzato. Ad esempio, l'implementazione dell'accesso ai dati LINQ to SQL usa questa funzionalità per convertire alberi delle espressioni in istruzioni Transact-SQL che possono essere valutate dal database.
Molti operatori di query standard definiti nella Queryable classe hanno uno o più parametri di tipo Expression<TDelegate>.
L'oggetto NodeType di è Expression<TDelegate>Lambda.
Utilizzare il Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) metodo o Lambda<TDelegate>(Expression, ParameterExpression[]) per creare un Expression<TDelegate> oggetto .
Proprietà
| Nome | Descrizione |
|---|---|
| Body |
Ottiene il corpo dell'espressione lambda. (Ereditato da LambdaExpression) |
| CanReduce |
Indica che il nodo può essere ridotto a un nodo più semplice. Se restituisce true, è possibile chiamare Reduce() per produrre la forma ridotta. (Ereditato da Expression) |
| Name |
Ottiene il nome dell'espressione lambda. (Ereditato da LambdaExpression) |
| NodeType |
Restituisce il tipo di nodo dell'oggetto Expression. (Ereditato da LambdaExpression) |
| Parameters |
Ottiene i parametri dell'espressione lambda. (Ereditato da LambdaExpression) |
| ReturnType |
Ottiene il tipo restituito dell'espressione lambda. (Ereditato da LambdaExpression) |
| TailCall |
Ottiene il valore che indica se l'espressione lambda verrà compilata con l'ottimizzazione della chiamata finale. (Ereditato da LambdaExpression) |
| Type |
Ottiene il tipo statico dell'espressione rappresentata da .Expression (Ereditato da LambdaExpression) |
Metodi
| Nome | Descrizione |
|---|---|
| Accept(ExpressionVisitor) |
Invia al metodo visit specifico per questo tipo di nodo. Ad esempio, MethodCallExpression chiama .VisitMethodCall(MethodCallExpression) (Ereditato da Expression) |
| Compile() |
Compila l'espressione lambda descritta dall'albero delle espressioni nel codice eseguibile e produce un delegato che rappresenta l'espressione lambda. |
| Compile(Boolean) |
Compila l'espressione lambda descritta dall'albero delle espressioni in codice interpretato o compilato e produce un delegato che rappresenta l'espressione lambda. |
| Compile(DebugInfoGenerator) |
Produce un delegato che rappresenta l'espressione lambda. |
| CompileToMethod(MethodBuilder, DebugInfoGenerator) |
Compila l'espressione lambda in una definizione di metodo e in informazioni di debug personalizzate. (Ereditato da LambdaExpression) |
| CompileToMethod(MethodBuilder) |
Compila l'espressione lambda in una definizione di metodo. (Ereditato da LambdaExpression) |
| Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
| GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
| GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
| MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
| Reduce() |
Riduce questo nodo a un'espressione più semplice. Se CanReduce restituisce true, verrà restituita un'espressione valida. Questo metodo può restituire un altro nodo che deve essere ridotto. (Ereditato da Expression) |
| ReduceAndCheck() |
Riduce questo nodo a un'espressione più semplice. Se CanReduce restituisce true, verrà restituita un'espressione valida. Questo metodo può restituire un altro nodo che deve essere ridotto. (Ereditato da Expression) |
| ReduceExtensions() |
Riduce l'espressione a un tipo di nodo noto (che non è un nodo di estensione) o restituisce semplicemente l'espressione se è già un tipo noto. (Ereditato da Expression) |
| ToString() |
Restituisce una rappresentazione testuale dell'oggetto Expression. (Ereditato da Expression) |
| Update(Expression, IEnumerable<ParameterExpression>) |
Crea una nuova espressione simile a questa, ma utilizzando gli elementi figlio forniti. Se tutti gli elementi figlio sono uguali, restituirà questa espressione. |
| VisitChildren(ExpressionVisitor) |
Riduce il nodo e quindi chiama il delegato visitor nell'espressione ridotta. Il metodo genera un'eccezione se il nodo non è reducibile. (Ereditato da Expression) |