IndexExpression Classe

Définition

Représente l’indexation d’une propriété ou d’un tableau.

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
Héritage
IndexExpression
Implémente

Exemples

L’exemple de code suivant montre comment créer un objet du IndexExpression type et l’utiliser pour modifier une valeur d’un élément de tableau à l’aide de la ArrayAccess méthode.

// 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

Propriétés

Nom Description
Arguments

Obtient les arguments qui seront utilisés pour indexer la propriété ou le tableau.

CanReduce

Indique que le nœud peut être réduit à un nœud plus simple. Si cela retourne la valeur true, Reduce() peut être appelé pour produire le formulaire réduit.

(Hérité de Expression)
Indexer

Obtient la PropertyInfo propriété si l’expression représente une propriété indexée, retourne null sinon.

NodeType

Retourne le type de nœud de ce Expression.

Object

Objet à indexer.

Type

Obtient le type statique de l’expression que cela Expression représente.

Méthodes

Nom Description
Accept(ExpressionVisitor)

Répartit vers la méthode de visite spécifique pour ce type de nœud. Par exemple, MethodCallExpression appelle le VisitMethodCall(MethodCallExpression).

(Hérité de Expression)
Equals(Object)

Détermine si l’objet spécifié est égal à l’objet actuel.

(Hérité de Object)
GetHashCode()

Sert de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient la Type de l’instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Objectactuel.

(Hérité de Object)
Reduce()

Réduit ce nœud à une expression plus simple. Si CanReduce retourne true, cela doit renvoyer une expression valide. Cette méthode peut retourner un autre nœud qui lui-même doit être réduit.

(Hérité de Expression)
ReduceAndCheck()

Réduit ce nœud à une expression plus simple. Si CanReduce retourne true, cela doit renvoyer une expression valide. Cette méthode peut retourner un autre nœud qui lui-même doit être réduit.

(Hérité de Expression)
ReduceExtensions()

Réduit l’expression à un type de nœud connu (qui n’est pas un nœud d’extension) ou retourne simplement l’expression s’il s’agit déjà d’un type connu.

(Hérité de Expression)
ToString()

Retourne une représentation textuelle du Expression.

(Hérité de Expression)
Update(Expression, IEnumerable<Expression>)

Crée une expression semblable à celle-ci, mais à l’aide des enfants fournis. Si tous les enfants sont identiques, il retourne cette expression.

VisitChildren(ExpressionVisitor)

Réduit le nœud, puis appelle le délégué visiteur sur l’expression réduite. La méthode lève une exception si le nœud n’est pas réductible.

(Hérité de Expression)

Implémentations d’interfaces explicites

Nom Description
IArgumentProvider.ArgumentCount

Retourne le nombre d’arguments au nœud de l’arborescence d’expressions. Vous ne devez pas utiliser ce membre. Il est public uniquement en raison de la refactorisation d’assembly, et il est utilisé en interne pour les optimisations des performances.

IArgumentProvider.GetArgument(Int32)

Retourne l’argument à l’index, lève si l’index est hors limites. Vous ne devez pas utiliser ce membre. Il est public uniquement en raison de la refactorisation d’assembly, et il est utilisé en interne pour les optimisations des performances.

S’applique à