IndexExpression Classe

Definição

Representa a indexação de uma propriedade ou matriz.

public ref class IndexExpression sealed : System::Linq::Expressions::Expression, System::Linq::Expressions::IArgumentProvider
public ref class IndexExpression sealed : System::Linq::Expressions::Expression
public sealed class IndexExpression : System.Linq.Expressions.Expression, System.Linq.Expressions.IArgumentProvider
public sealed class IndexExpression : System.Linq.Expressions.Expression
type IndexExpression = class
    inherit Expression
    interface IArgumentProvider
type IndexExpression = class
    inherit Expression
Public NotInheritable Class IndexExpression
Inherits Expression
Implements IArgumentProvider
Public NotInheritable Class IndexExpression
Inherits Expression
Herança
IndexExpression
Implementações

Exemplos

O exemplo de código a seguir mostra como criar um objeto do IndexExpression tipo e usá-lo para alterar um valor de um elemento de matriz usando o ArrayAccess método.

// Add the following directive to your file:
// using System.Linq.Expressions;

// This parameter expression represents a variable that will hold the array.
ParameterExpression arrayExpr = Expression.Parameter(typeof(int[]), "Array");

// This parameter expression represents an array index.
ParameterExpression indexExpr = Expression.Parameter(typeof(int), "Index");

// This parameter represents the value that will be added to a corresponding array element.
ParameterExpression valueExpr = Expression.Parameter(typeof(int), "Value");

// This expression represents an array access operation.
// It can be used for assigning to, or reading from, an array element.
Expression arrayAccessExpr = Expression.ArrayAccess(
    arrayExpr,
    indexExpr
);

// This lambda expression assigns a value provided to it to a specified array element.
// The array, the index of the array element, and the value to be added to the element
// are parameters of the lambda expression.
Expression<Func<int[], int, int, int>> lambdaExpr = Expression.Lambda<Func<int[], int, int, int>>(
    Expression.Assign(arrayAccessExpr, Expression.Add(arrayAccessExpr, valueExpr)),
    arrayExpr,
    indexExpr,
    valueExpr
);

// Print out expressions.
Console.WriteLine("Array Access Expression:");
Console.WriteLine(arrayAccessExpr.ToString());

Console.WriteLine("Lambda Expression:");
Console.WriteLine(lambdaExpr.ToString());

Console.WriteLine("The result of executing the lambda expression:");

// The following statement first creates an expression tree,
// then compiles it, and then executes it.
// Parameters passed to the Invoke method are passed to the lambda expression.
Console.WriteLine(lambdaExpr.Compile().Invoke(new int[] { 10, 20, 30 }, 0, 5));

// This code example produces the following output:
//
// Array Access Expression:
// Array[Index]

// Lambda Expression:
// (Array, Index, Value) => (Array[Index] = (Array[Index] + Value))

// The result of executing the lambda expression:
// 15
' Add the following directive to your file:
' Imports System.Linq.Expressions  

' This parameter expression represents a variable that will hold the array.
Dim arrayExpr As ParameterExpression = Expression.Parameter(GetType(Integer()), "Array")

' This parameter expression represents an array index.
' For multidimensional arrays, you can define several indexes. 
Dim indexExpr As ParameterExpression = Expression.Parameter(GetType(Integer), "Index")

' This parameter represents the value that will be added to a corresponding array element.
Dim valueExpr As ParameterExpression = Expression.Parameter(GetType(Integer), "Value")

' This expression represents an array access operation.
' It can be used for assigning to, or reading from, an array element.
Dim arrayAccessExpr As Expression = Expression.ArrayAccess(
    arrayExpr,
    indexExpr
)

' This lambda expression assigns a value provided to it to a specified array element.
' The array, the index of the array element, and the value to be added to the element
' are parameters of the lambda expression.
Dim lambdaExpr As Expression(Of Func(Of Integer(), Integer, Integer, Integer)) =
    Expression.Lambda(Of Func(Of Integer(), Integer, Integer, Integer))(
        Expression.Assign(arrayAccessExpr, Expression.Add(arrayAccessExpr, valueExpr)),
    arrayExpr,
    indexExpr,
    valueExpr
  )

' Print expressions.
Console.WriteLine("Array Access Expression:")
Console.WriteLine(arrayAccessExpr.ToString())

Console.WriteLine("Lambda Expression:")
Console.WriteLine(lambdaExpr.ToString())

Console.WriteLine("The result of executing the lambda expression:")

' The following statement first creates an expression tree,
' then compiles it, and then executes it.
' Parameters passed to the Invoke method are passed to the lambda expression.
Console.WriteLine(lambdaExpr.Compile().Invoke(New Integer() {10, 20, 30}, 0, 5))

' This code example produces the following output:
'
' Array Access Expression:
' Array[Index]

' Lambda Expression:
' (Array, Index, Value) => (Array[Index] = (Array[Index] + Value))

' The result of executing the lambda expression:
' 15

Propriedades

Nome Description
Arguments

Obtém os argumentos que serão usados para indexar a propriedade ou a matriz.

CanReduce

Indica que o nó pode ser reduzido a um nó mais simples. Se isso retornar true, Reduce() poderá ser chamado para produzir o formulário reduzido.

(Herdado de Expression)
Indexer

Obtém o PropertyInfo valor da propriedade se a expressão representa uma propriedade indexada, retorna nulo caso contrário.

NodeType

Retorna o tipo de nó deste Expression.

Object

Um objeto para indexar.

Type

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

Métodos

Nome Description
Accept(ExpressionVisitor)

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

(Herdado de Expression)
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 Objectatual.

(Herdado de Object)
Reduce()

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

(Herdado de Expression)
ReduceAndCheck()

Reduz esse nó a uma expressão mais simples. Se CanReduce retornar true, isso deverá retornar uma expressão válida. Esse método pode retornar outro nó que deve 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 já for um tipo conhecido.

(Herdado de Expression)
ToString()

Retorna uma representação textual do Expression.

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

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

VisitChildren(ExpressionVisitor)

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

(Herdado de Expression)

Implantações explícitas de interface

Nome Description
IArgumentProvider.ArgumentCount

Retorna o número de argumentos para o nó da árvore de expressão. Você não deve usar este membro. Ele só é público devido à refatoração de assembly e é usado internamente para otimizações de desempenho.

IArgumentProvider.GetArgument(Int32)

Retorna o argumento no índice, gerando se o índice estiver fora dos limites. Você não deve usar este membro. Ele só é público devido à refatoração de assembly e é usado internamente para otimizações de desempenho.

Aplica-se a