Condividi tramite


Expression<TDelegate> Classe

Definizione

Rappresenta un'espressione lambda fortemente tipizzata come una struttura di dati sotto forma di un albero delle espressioni. La 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 dall'oggetto Expression<TDelegate>.

Ereditarietà
Expression<TDelegate>

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.

Nota

Esiste una conversione da un'espressione lambda al 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 trasparente ed esplicita la struttura dell'espressione lambda. È 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 controllato, 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à

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 generare la forma ridotta.

(Ereditato da Expression)
Name

Ottiene il nome dell'espressione lambda.

(Ereditato da LambdaExpression)
NodeType

Restituisce il tipo di nodo di Expression.

(Ereditato da LambdaExpression)
Parameters

Ottiene i parametri dell'espressione lambda.

(Ereditato da LambdaExpression)
ReturnType

Ottiene il tipo di ritorno dell'espressione lambda.

(Ereditato da LambdaExpression)
TailCall

Ottiene il valore che indica se l'espressione lambda sarà compilata con l'ottimizzazione della chiamata tail.

(Ereditato da LambdaExpression)
Type

Ottiene il tipo statico dell'espressione rappresentata da Expression.

(Ereditato da LambdaExpression)

Metodi

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 dalla struttura ad albero dell'espressione in codice eseguibile e produce un delegato che rappresenta l'espressione lambda.

Compile(Boolean)

Compila l'espressione lambda descritta dall'albero delle espressioni nel codice interpretato o compilato e produce un delegato che rappresenta l'espressione lambda.

Compile(Boolean)

Produce un delegato interpretato o compilato che rappresenta l'espressione lambda.

(Ereditato da LambdaExpression)
Compile(DebugInfoGenerator)

Produce un delegato che rappresenta l'espressione lambda.

Compile(DebugInfoGenerator)

Produce un delegato che rappresenta l'espressione lambda.

(Ereditato da LambdaExpression)
CompileToMethod(MethodBuilder)

Compila il lambda in una definizione del metodo.

(Ereditato da LambdaExpression)
CompileToMethod(MethodBuilder, DebugInfoGenerator)

Compila il lambda in una definizione del metodo e informazioni di debug personalizzate.

(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 l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
Reduce()

Riduce questo nodo a un'espressione più semplice. Se CanReduce restituisce true, deve essere restituita un'espressione valida. Questo metodo può restituire un altro nodo che deve essere a sua volta ridotto.

(Ereditato da Expression)
ReduceAndCheck()

Riduce questo nodo a un'espressione più semplice. Se CanReduce restituisce true, deve essere restituita un'espressione valida. Questo metodo può restituire un altro nodo che deve essere a sua volta ridotto.

(Ereditato da Expression)
ReduceExtensions()

Riduce l'espressione a un tipo di nodo noto (diverso da un nodo di estensione) o restituisce solo l'espressione se è già un tipo noto.

(Ereditato da Expression)
ToString()

Restituisce una rappresentazione testuale di Expression.

(Ereditato da Expression)
Update(Expression, IEnumerable<ParameterExpression>)

Crea una nuova espressione simile a questa, ma che usa gli elementi figlio specificati. Se tutti gli elementi figlio sono uguali, verrà restituita questa espressione.

VisitChildren(ExpressionVisitor)

Riduce il nodo, quindi chiama il delegato del visitatore sull'espressione ridotta. Se il nodo non è riducibile, il metodo genera un'eccezione.

(Ereditato da Expression)

Si applica a

Vedi anche