Compartilhar via


Expression<TDelegate> Classe

Definição

Representa uma expressão lambda fortemente tipada como uma estrutura de dados na forma de uma árvore de expressão. Essa 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

TDelegate

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

Herança
Expression<TDelegate>

Exemplos

O exemplo de código a seguir demonstra como representar uma expressão lambda como código executável na forma de um delegado e como dados na forma de uma árvore de expressão. Ele também demonstra como transformar a árvore de expressão 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

Comentários

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 criar uma árvore de expressão.

Observação

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

A árvore de expressão é uma representação de dados na memória da expressão lambda. A árvore de expressão torna a estrutura da expressão lambda transparente e explícita. Você pode interagir com os dados na árvore de expressão da mesma forma que pode com qualquer outra estrutura de dados.

A capacidade de tratar expressões como estruturas de dados permite que as APIs recebam código de usuário em um formato que pode ser inspecionado, transformado e processado de maneira personalizada. Por exemplo, o LINQ to SQL implementação de acesso a dados usa esse recurso para converter árvores de expressão em instruções Transact-SQL que podem ser avaliadas pelo banco 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

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 isso retornar verdadeiro, Reduce() poderá ser chamado para produzir a forma reduzida.

(Herdado de Expression)
Name

Obtém o nome da expressão lambda.

(Herdado de LambdaExpression)
NodeType

Retorna 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 chamada tail.

(Herdado de LambdaExpression)
Type

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

(Herdado de LambdaExpression)

Métodos

Accept(ExpressionVisitor)

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

(Herdado de Expression)
Compile()

Compila a expressão lambda descrita pela árvore de expressão em um 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ão em um código interpretado ou compilado e produz um delegado que representa a expressão lambda.

Compile(Boolean)

Produz um delegado interpretado ou compilado que representa a expressão lambda.

(Herdado de LambdaExpression)
Compile(DebugInfoGenerator)

Produz um delegado que representa a expressão lambda.

Compile(DebugInfoGenerator)

Produz um delegado que representa a expressão lambda.

(Herdado de LambdaExpression)
CompileToMethod(MethodBuilder)

Compila o lambda em uma definição de método.

(Herdado de LambdaExpression)
CompileToMethod(MethodBuilder, DebugInfoGenerator)

Compila o lambda em uma definição de método e as informações de depuração personalizada.

(Herdado de LambdaExpression)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
Reduce()

Reduz esse nó a uma expressão mais simples. Se CanReduce retornar true, ele deverá retornar uma expressão válida. Esse método pode retornar outro nó que também precisa ser reduzido.

(Herdado de Expression)
ReduceAndCheck()

Reduz esse nó a uma expressão mais simples. Se CanReduce retornar true, ele deverá retornar uma expressão válida. Esse método pode retornar outro nó que também precisa ser reduzido.

(Herdado de Expression)
ReduceExtensions()

Reduz a expressão a um tipo de nó conhecido (que não é um nó de extensão) ou apenas retorna a expressão se ele já é um tipo conhecido.

(Herdado de Expression)
ToString()

Retorna uma representação textual de Expression.

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

Cria uma nova expressão que é parecida com esta, mas usando os filhos fornecidos. Se todos os filhos forem os mesmos, ela retornará esta expressão.

VisitChildren(ExpressionVisitor)

Reduz o nó e, em seguida, chama o delegado visitante na expressão reduzida. O método gera uma exceção se o nó não é reduzível.

(Herdado de Expression)

Aplica-se a

Confira também