Expression<TDelegate> Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa una expresión lambda fuertemente tipada como una estructura de datos en forma de árbol de expresión. Esta clase no puede heredarse.
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
Parámetros de tipo
- TDelegate
Tipo del delegado que Expression<TDelegate> representa.
- Herencia
Ejemplos
En el ejemplo de código siguiente se muestra cómo representar una expresión lambda como código ejecutable en forma de delegado y como datos en forma de árbol de expresión. También muestra cómo volver a convertir el árbol de expresiones en código ejecutable mediante el Compile método .
// 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
Comentarios
Cuando se asigna una expresión lambda a una variable, un campo o un parámetro cuyo tipo es Expression<TDelegate>, el compilador emite instrucciones para crear un árbol de expresiones.
Nota:
Existe una conversión de una expresión lambda al tipo Expression<D> (Expression(Of D) en Visual Basic) si existe una conversión de la expresión lambda a un delegado de tipo D . Sin embargo, la conversión puede producir un error, por ejemplo, si el cuerpo de la expresión lambda es un bloque. Esto significa que los delegados y árboles de expresión se comportan de forma similar con respecto a la resolución de sobrecargas.
El árbol de expresiones es una representación de datos en memoria de la expresión lambda. El árbol de expresiones hace que la estructura de la expresión lambda sea transparente y explícita. Puede interactuar con los datos en el árbol de expresiones igual que con cualquier otra estructura de datos.
La capacidad de tratar expresiones como estructuras de datos permite a las API recibir código de usuario en un formato que se puede inspeccionar, transformar y procesar de forma personalizada. Por ejemplo, la implementación de acceso a datos LINQ to SQL usa esta instalación para traducir árboles de expresión a instrucciones Transact-SQL que la base de datos puede evaluar.
Muchos operadores de consulta estándar definidos en la Queryable clase tienen uno o varios parámetros de tipo Expression<TDelegate>.
el NodeType de es Expression<TDelegate>Lambda.
Use el Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) método o Lambda<TDelegate>(Expression, ParameterExpression[]) para crear un Expression<TDelegate> objeto .
Propiedades
| Nombre | Description |
|---|---|
| Body |
Obtiene el cuerpo de la expresión lambda. (Heredado de LambdaExpression) |
| CanReduce |
Indica que el nodo se puede reducir a un nodo más sencillo. Si devuelve true, se puede llamar a Reduce() para generar el formulario reducido. (Heredado de Expression) |
| Name |
Obtiene el nombre de la expresión lambda. (Heredado de LambdaExpression) |
| NodeType |
Devuelve el tipo de nodo de este Expression. (Heredado de LambdaExpression) |
| Parameters |
Obtiene los parámetros de la expresión lambda. (Heredado de LambdaExpression) |
| ReturnType |
Obtiene el tipo de valor devuelto de la expresión lambda. (Heredado de LambdaExpression) |
| TailCall |
Obtiene el valor que indica si la expresión lambda se compilará con la optimización de la llamada final. (Heredado de LambdaExpression) |
| Type |
Obtiene el tipo estático de la expresión que Expression representa. (Heredado de LambdaExpression) |
Métodos
| Nombre | Description |
|---|---|
| Accept(ExpressionVisitor) |
Envía al método de visita específico para este tipo de nodo. Por ejemplo, MethodCallExpression llama a VisitMethodCall(MethodCallExpression). (Heredado de Expression) |
| Compile() |
Compila la expresión lambda descrita por el árbol de expresiones en código ejecutable y genera un delegado que representa la expresión lambda. |
| Compile(Boolean) |
Compila la expresión lambda descrita por el árbol de expresiones en código interpretado o compilado y genera un delegado que representa la expresión lambda. |
| Compile(DebugInfoGenerator) |
Genera un delegado que representa la expresión lambda. |
| CompileToMethod(MethodBuilder, DebugInfoGenerator) |
Compila la expresión lambda en una definición de método e información de depuración personalizada. (Heredado de LambdaExpression) |
| CompileToMethod(MethodBuilder) |
Compila la expresión lambda en una definición de método. (Heredado de LambdaExpression) |
| Equals(Object) |
Determina si el objeto especificado es igual al objeto actual. (Heredado de Object) |
| GetHashCode() |
Actúa como función hash predeterminada. (Heredado de Object) |
| GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
| MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
| Reduce() |
Reduce este nodo a una expresión más sencilla. Si CanReduce devuelve true, debe devolver una expresión válida. Este método puede devolver otro nodo que se debe reducir. (Heredado de Expression) |
| ReduceAndCheck() |
Reduce este nodo a una expresión más sencilla. Si CanReduce devuelve true, debe devolver una expresión válida. Este método puede devolver otro nodo que se debe reducir. (Heredado de Expression) |
| ReduceExtensions() |
Reduce la expresión a un tipo de nodo conocido (que no es un nodo de extensión) o simplemente devuelve la expresión si ya es un tipo conocido. (Heredado de Expression) |
| ToString() |
Devuelve una representación textual de .Expression (Heredado de Expression) |
| Update(Expression, IEnumerable<ParameterExpression>) |
Crea una nueva expresión similar a esta, pero que usa los elementos secundarios proporcionados. Si todos los elementos secundarios son iguales, devolverá esta expresión. |
| VisitChildren(ExpressionVisitor) |
Reduce el nodo y, a continuación, llama al delegado de visitante en la expresión reducida. El método produce una excepción si el nodo no se puede deducir. (Heredado de Expression) |