Expression<TDelegate> Classe

Definição

Representa uma expressão lambda fortemente tipada como uma estrutura de dados na forma de uma árvore de expressões. Esta classe não pode ser herdada.

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 Genérico

TDelegate

O tipo de delegado que o Expression<TDelegate> representa.

Herança
Expression<TDelegate>

Exemplos

O exemplo de código seguinte demonstra como representar uma expressão lambda tanto como código executável na forma de um delegado como como dados na forma de uma árvore de expressões. Também demonstra como transformar a árvore de expressões de volta em código executável usando o 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

Observações

Quando uma expressão lambda é atribuída a uma variável, campo ou parâmetro cujo tipo é Expression<TDelegate>, o compilador emite instruções para construir uma árvore de expressões.

Note

Existe uma conversão de uma expressão lambda para o tipo Expression<D> (Expression(Of D) em Visual Basic) se existir uma conversão da expressão lambda para um delegado do tipo D. No entanto, a conversão pode falhar, por exemplo, se o corpo da expressão lambda for um bloco. Isto significa que delegados e árvores de expressões comportam-se de forma semelhante no que diz respeito à resolução por sobrecarga.

A árvore de expressões é uma representação de dados em memória da expressão lambda. A árvore de expressões torna a estrutura da expressão lambda transparente e explícita. Podes interagir com os dados na árvore de expressões tal como podes com qualquer outra estrutura de dados.

A capacidade de tratar expressões como estruturas de dados permite que as APIs recebam código de utilizador num formato que pode ser inspecionado, transformado e processado de forma personalizada. Por exemplo, a implementação de acesso a dados LINQ para SQL utiliza esta funcionalidade para traduzir árvores de expressões em instruções Transact-SQL que podem ser avaliadas pela base de dados.

Muitos operadores de consulta padrão definidos na Queryable classe têm um ou mais parâmetros do tipo Expression<TDelegate>.

O NodeType de um Expression<TDelegate> é Lambda.

Use o Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) método ou Lambda<TDelegate>(Expression, ParameterExpression[]) para criar um Expression<TDelegate> objeto.

Propriedades

Name Description
Body

Obtém o corpo da expressão lambda.

(Herdado de LambdaExpression)
CanReduce

Indica que o nó pode ser reduzido a um nó mais simples. Se isto devolver verdadeiro, Reduce() pode ser chamado para produzir a forma reduzida.

(Herdado de Expression)
Name

Recebe o nome da expressão lambda.

(Herdado de LambdaExpression)
NodeType

Devolve o tipo de nó deste Expression.

(Herdado de LambdaExpression)
Parameters

Obtém os parâmetros da expressão lambda.

(Herdado de LambdaExpression)
ReturnType

Obtém o tipo de retorno da expressão lambda.

(Herdado de LambdaExpression)
TailCall

Obtém o valor que indica se a expressão lambda será compilada com a otimização de chamadas de cauda.

(Herdado de LambdaExpression)
Type

Obtém o tipo estático da expressão que isto Expression representa.

(Herdado de LambdaExpression)

Métodos

Name Description
Accept(ExpressionVisitor)

Despacha para o método de visita específico para este tipo de nó. Por exemplo, MethodCallExpression chama o VisitMethodCall(MethodCallExpression).

(Herdado de Expression)
Compile()

Compila a expressão lambda descrita pela árvore de expressões em código executável e produz um delegado que representa a expressão lambda.

Compile(Boolean)

Compila a expressão lambda descrita pela árvore de expressões em código interpretado ou compilado e produz um delegado que representa a expressão lambda.

Compile(DebugInfoGenerator)

Produz um delegado que representa a expressão lambda.

CompileToMethod(MethodBuilder, DebugInfoGenerator)

Compila o lambda numa definição de método e informação de depuração personalizada.

(Herdado de LambdaExpression)
CompileToMethod(MethodBuilder)

Compila o lambda numa definição de método.

(Herdado de LambdaExpression)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
Reduce()

Reduz este nó a uma expressão mais simples. Se o CanReduce devolver verdadeiro, isto deverá devolver uma expressão válida. Este método pode devolver outro nó que, por sua vez, deve ser reduzido.

(Herdado de Expression)
ReduceAndCheck()

Reduz este nó a uma expressão mais simples. Se o CanReduce devolver verdadeiro, isto deverá devolver uma expressão válida. Este método pode devolver outro nó que, por sua vez, deve ser reduzido.

(Herdado de Expression)
ReduceExtensions()

Reduz a expressão para um tipo de nó conhecido (que não é um nó de Extensão) ou simplesmente devolve a expressão se já for um tipo conhecido.

(Herdado de Expression)
ToString()

Devolve uma representação textual do Expression.

(Herdado de Expression)
Update(Expression, IEnumerable<ParameterExpression>)

Cria uma nova expressão semelhante a esta, mas usando os filhos fornecidos. Se todas as crianças forem iguais, ela devolverá essa expressão.

VisitChildren(ExpressionVisitor)

Reduz o nó e depois chama o delegado visitante na expressão reduzida. O método lança uma exceção se o nó não for redutível.

(Herdado de Expression)

Aplica-se a

Ver também