Expression<TDelegate> Expression<TDelegate> Expression<TDelegate> Expression<TDelegate> Class

Definizione

Rappresenta un'espressione lambda fortemente tipizzata come struttura dei dati sotto forma di una struttura ad albero dell'espressione.Represents a strongly typed lambda expression as a data structure in the form of an expression tree. Questa classe non può essere ereditata.This class cannot be inherited.

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>.The type of the delegate that the Expression<TDelegate> represents.

Ereditarietà
Expression<TDelegate>Expression<TDelegate>Expression<TDelegate>Expression<TDelegate>

Esempi

Nell'esempio di codice riportato di seguito viene illustrato come rappresentare un'espressione lambda come codice eseguibile sotto forma di delegato e come dati sotto forma di un albero delle espressioni.The following code example demonstrates how to represent a lambda expression both as executable code in the form of a delegate and as data in the form of an expression tree. Viene inoltre illustrato come riconvertire l'albero delle espressioni nel codice eseguibile utilizzando il Compile metodo.It also demonstrates how to turn the expression tree back into executable code by using the Compile method.


// 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, un campo o un parametro il Expression<TDelegate>cui tipo è, il compilatore genera istruzioni per compilare un albero delle espressioni.When a lambda expression is assigned to a variable, field, or parameter whose type is Expression<TDelegate>, the compiler emits instructions to build an expression tree.

Nota

Viene eseguita una conversione da un'espressione lambda Expression<D> alExpression(Of D) tipo (in Visual Basic) se è presente una conversione dall'espressione lambda a un delegato D di tipo.A conversion from a lambda expression to type Expression<D> (Expression(Of D) in Visual Basic) exists if a conversion from the lambda expression to a delegate of type D exists. Tuttavia, la conversione potrebbe non riuscire, ad esempio, se il corpo dell'espressione lambda è un blocco.However, the conversion may fail, for example, if the body of the lambda expression is a block. Ciò significa che i delegati e gli alberi delle espressioni si comportano in modo analogo rispetto alla risoluzioneThis means that delegates and expression trees behave similarly with regard to overload resolution.

L'albero delle espressioni è una rappresentazione dei dati in memoria dell'espressione lambda.The expression tree is an in-memory data representation of the lambda expression. L'albero delle espressioni rende trasparente ed esplicita la struttura dell'espressione lambda.The expression tree makes the structure of the lambda expression transparent and explicit. È possibile interagire con i dati nell'albero delle espressioni esattamente come per qualsiasi altra struttura di dati.You can interact with the data in the expression tree just as you can with any other data structure.

La possibilità di considerare 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.The ability to treat expressions as data structures enables APIs to receive user code in a format that can be inspected, transformed, and processed in a custom manner. L'implementazione dell' LINQ to SQLLINQ to SQL accesso ai dati, ad esempio, utilizza questa funzionalità per tradurre gli alberi delle espressioni in istruzioni Transact-SQL che possono essere valutate dal database.For example, the LINQ to SQLLINQ to SQL data access implementation uses this facility to translate expression trees to Transact-SQL statements that can be evaluated by the database.

Molti operatori di query standard definiti nella Queryable classe hanno uno o più parametri di tipo Expression<TDelegate>.Many standard query operators defined in the Queryable class have one or more parameters of type Expression<TDelegate>.

Il NodeType valore di Expression<TDelegate> un Lambdaoggetto è.The NodeType of an Expression<TDelegate> is Lambda.

Usare il Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) metodo Lambda<TDelegate>(Expression, ParameterExpression[]) o per creare un Expression<TDelegate> oggetto.Use the Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) or Lambda<TDelegate>(Expression, ParameterExpression[]) method to create an Expression<TDelegate> object.

Metodi

Accept(ExpressionVisitor) Accept(ExpressionVisitor) Accept(ExpressionVisitor) Accept(ExpressionVisitor)

Invia al metodo Visit specifico per questo tipo di nodo.Dispatches to the specific visit method for this node type. Ad esempio, MethodCallExpression chiama VisitMethodCall(MethodCallExpression).For example, MethodCallExpression calls the VisitMethodCall(MethodCallExpression).

(Inherited from Expression)
Compile() Compile() Compile() Compile()

Compila l'espressione lambda descritta dalla struttura ad albero dell'espressione in codice eseguibile e produce un delegato che rappresenta l'espressione lambda.Compiles the lambda expression described by the expression tree into executable code and produces a delegate that represents the lambda expression.

Compile(Boolean) Compile(Boolean) Compile(Boolean) 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.Compiles the lambda expression described by the expression tree into interpreted or compiled code and produces a delegate that represents the lambda expression.

Compile(DebugInfoGenerator) Compile(DebugInfoGenerator) Compile(DebugInfoGenerator) Compile(DebugInfoGenerator)

Produce un delegato che rappresenta l'espressione lambda.Produces a delegate that represents the lambda expression.

CompileToMethod(MethodBuilder) CompileToMethod(MethodBuilder) CompileToMethod(MethodBuilder) CompileToMethod(MethodBuilder)

Compila il lambda in una definizione del metodo.Compiles the lambda into a method definition.

(Inherited from LambdaExpression)
CompileToMethod(MethodBuilder, DebugInfoGenerator) CompileToMethod(MethodBuilder, DebugInfoGenerator) CompileToMethod(MethodBuilder, DebugInfoGenerator) CompileToMethod(MethodBuilder, DebugInfoGenerator)

Compila il lambda in una definizione del metodo e informazioni di debug personalizzate.Compiles the lambda into a method definition and custom debug information.

(Inherited from LambdaExpression)
Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Inherited from Object)
Reduce() Reduce() Reduce() Reduce()

Riduce questo nodo a un'espressione più semplice.Reduces this node to a simpler expression. Se CanReduce restituisce true, deve essere restituita un'espressione valida.If CanReduce returns true, this should return a valid expression. Questo metodo può restituire un altro nodo che deve essere a sua volta ridotto.This method can return another node which itself must be reduced.

(Inherited from Expression)
ReduceAndCheck() ReduceAndCheck() ReduceAndCheck() ReduceAndCheck()

Riduce questo nodo a un'espressione più semplice.Reduces this node to a simpler expression. Se CanReduce restituisce true, deve essere restituita un'espressione valida.If CanReduce returns true, this should return a valid expression. Questo metodo può restituire un altro nodo che deve essere a sua volta ridotto.This method can return another node which itself must be reduced.

(Inherited from Expression)
ReduceExtensions() ReduceExtensions() ReduceExtensions() 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.Reduces the expression to a known node type (that is not an Extension node) or just returns the expression if it is already a known type.

(Inherited from Expression)
ToString() ToString() ToString() ToString()

Restituisce una rappresentazione testuale di Expression.Returns a textual representation of the Expression.

(Inherited from Expression)
Update(Expression, IEnumerable<ParameterExpression>) Update(Expression, IEnumerable<ParameterExpression>) Update(Expression, IEnumerable<ParameterExpression>) Update(Expression, IEnumerable<ParameterExpression>)

Crea una nuova espressione simile a quella corrente, utilizzando però gli elementi figlio specificati.Creates a new expression that is like this one, but using the supplied children. Se tutti gli elementi figlio sono uguali, verrà restituita l'espressione corrente.If all of the children are the same, it will return this expression.

VisitChildren(ExpressionVisitor) VisitChildren(ExpressionVisitor) VisitChildren(ExpressionVisitor) VisitChildren(ExpressionVisitor)

Riduce il nodo, quindi chiama il delegato del visitatore sull'espressione ridotta.Reduces the node and then calls the visitor delegate on the reduced expression. Se il nodo non è riducibile, il metodo genera un'eccezione.The method throws an exception if the node is not reducible.

(Inherited from Expression)

Proprietà

Body Body Body Body

Ottiene il corpo dell'espressione lambda.Gets the body of the lambda expression.

(Inherited from LambdaExpression)
CanReduce CanReduce CanReduce CanReduce

Indica che il nodo può essere ridotto a un nodo più semplice.Indicates that the node can be reduced to a simpler node. Se restituisce true, è possibile chiamare Reduce() per generare la forma ridotta.If this returns true, Reduce() can be called to produce the reduced form.

(Inherited from Expression)
Name Name Name Name

Ottiene il nome dell'espressione lambda.Gets the name of the lambda expression.

(Inherited from LambdaExpression)
NodeType NodeType NodeType NodeType

Restituisce il tipo di nodo di Expression.Returns the node type of this Expression.

(Inherited from LambdaExpression)
Parameters Parameters Parameters Parameters

Ottiene i parametri dell'espressione lambda.Gets the parameters of the lambda expression.

(Inherited from LambdaExpression)
ReturnType ReturnType ReturnType ReturnType

Ottiene il tipo di ritorno dell'espressione lambda.Gets the return type of the lambda expression.

(Inherited from LambdaExpression)
TailCall TailCall TailCall TailCall

Ottiene il valore che indica se l'espressione lambda sarà compilata con l'ottimizzazione della chiamata tail.Gets the value that indicates if the lambda expression will be compiled with the tail call optimization.

(Inherited from LambdaExpression)
Type Type Type Type

Ottiene il tipo statico dell'espressione rappresentata da Expression.Gets the static type of the expression that this Expression represents.

(Inherited from LambdaExpression)

Si applica a

Vedi anche