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 con el formato de un á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 de 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 expresión 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, campo o parámetro cuyo tipo es Expression<TDelegate>, el compilador emite instrucciones para crear un árbol de expresión.
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 los árboles de expresión se comportan de forma similar con respecto a la resolución de sobrecargas.
El árbol de expresión es una representación de datos en memoria de la expresión lambda. El árbol de expresión hace que la estructura de la expresión lambda sea transparente y explícita. Puede interactuar con los datos en el árbol de expresiones del mismo modo 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 de LINQ to SQL usa esta funció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 objeto de es LambdaExpression<TDelegate> .
Use el Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) método o Lambda<TDelegate>(Expression, ParameterExpression[]) para crear un Expression<TDelegate> objeto .
Propiedades
Body |
Obtiene el cuerpo de la expresión lambda. (Heredado de LambdaExpression) |
CanReduce |
Indica que el nodo se puede reducir a uno más simple. 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 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 llamada de cola. (Heredado de LambdaExpression) |
Type |
Obtiene el tipo estático de la expresión que Expression representa. (Heredado de LambdaExpression) |
Métodos
Accept(ExpressionVisitor) |
Envía la expresión al método de visita específico de 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 la expresión en el 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 expresión en el código interpretado o compilado y genera a un delegado que representa la expresión lambda. |
Compile(Boolean) |
Genera a un delegado interpretado o compilado que representa la expresión lambda. (Heredado de LambdaExpression) |
Compile(DebugInfoGenerator) |
Genera un delegado que representa la expresión lambda. |
Compile(DebugInfoGenerator) |
Genera un delegado que representa la expresión lambda. (Heredado de LambdaExpression) |
CompileToMethod(MethodBuilder) |
Compila el lambda en una definición de método. (Heredado de LambdaExpression) |
CompileToMethod(MethodBuilder, DebugInfoGenerator) |
Compila el lambda en una definición de método e información de depuración personalizada. (Heredado de LambdaExpression) |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
Reduce() |
Reduce este nodo a una expresión más simple. Si CanReduce devuelve true, debería devolver una expresión válida. Este método puede devolver otro nodo que se debe reducir a su vez. (Heredado de Expression) |
ReduceAndCheck() |
Reduce este nodo a una expresión más simple. Si CanReduce devuelve true, debería devolver una expresión válida. Este método puede devolver otro nodo que se debe reducir a su vez. (Heredado de Expression) |
ReduceExtensions() |
Reduce la expresión a un tipo de nodo conocido (no es un nodo de extensión) o, si ya es un tipo conocido, solo devuelve la expresión. (Heredado de Expression) |
ToString() |
Devuelve una representación textual de Expression. (Heredado de Expression) |
Update(Expression, IEnumerable<ParameterExpression>) |
Crea una nueva expresión que es como esta, pero usa el elemento secundario proporcionado. Si todos los elementos secundarios son iguales, devolverá esta expresión. |
VisitChildren(ExpressionVisitor) |
Reduce el nodo y, a continuación, llama al delegado del visitante en la expresión reducida. El método inicia una excepción si el nodo no es reducible. (Heredado de Expression) |