IndexExpression Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет индексирование свойства или массива.
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
- Наследование
- Реализации
Примеры
В следующем примере кода показано, как создать объект IndexExpression типа и использовать его для изменения значения элемента массива ArrayAccess с помощью метода.
// 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
Свойства
| Имя | Описание |
|---|---|
| Arguments |
Возвращает аргументы, которые будут использоваться для индексирования свойства или массива. |
| CanReduce |
Указывает, что узел может быть сокращен до более простого узла. Если это возвращает значение true, можно вызвать reduce() для создания сокращенной формы. (Унаследовано от Expression) |
| Indexer |
PropertyInfo Возвращает свойство, если выражение представляет индексированное свойство, возвращает значение NULL в противном случае. |
| NodeType |
Возвращает тип узла этого Expressionтипа. |
| Object |
Объект для индексирования. |
| Type |
Возвращает статический тип выражения, представляющего это Expression выражение. |
Методы
| Имя | Описание |
|---|---|
| Accept(ExpressionVisitor) |
Отправляется в конкретный метод посещения для этого типа узла. Например, MethodCallExpression вызывает объект VisitMethodCall(MethodCallExpression). (Унаследовано от Expression) |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| Reduce() |
Сокращает этот узел до более простого выражения. Если CanReduce возвращает значение true, это должно возвращать допустимое выражение. Этот метод может возвращать другой узел, который должен быть сокращен. (Унаследовано от Expression) |
| ReduceAndCheck() |
Сокращает этот узел до более простого выражения. Если CanReduce возвращает значение true, это должно возвращать допустимое выражение. Этот метод может возвращать другой узел, который должен быть сокращен. (Унаследовано от Expression) |
| ReduceExtensions() |
Уменьшает выражение до известного типа узла (который не является узлом расширения) или просто возвращает выражение, если оно уже известного типа. (Унаследовано от Expression) |
| ToString() |
Возвращает текстовое представление Expressionобъекта . (Унаследовано от Expression) |
| Update(Expression, IEnumerable<Expression>) |
Создает новое выражение, аналогичное этому, но используя предоставленные дочерние элементы. Если все дочерние элементы одинаковы, он вернет это выражение. |
| VisitChildren(ExpressionVisitor) |
Уменьшает узел, а затем вызывает делегат посетителя в сокращенном выражении. Метод создает исключение, если узел не является редуцируемым. (Унаследовано от Expression) |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| IArgumentProvider.ArgumentCount |
Возвращает количество аргументов в узле дерева выражений. Этот член не следует использовать. Она доступна только из-за рефакторинга сборки и используется внутренне для оптимизации производительности. |
| IArgumentProvider.GetArgument(Int32) |
Возвращает аргумент по индексу, вызывая, если индекс выходит за пределы. Этот член не следует использовать. Она доступна только из-за рефакторинга сборки и используется внутренне для оптимизации производительности. |