IndexExpression Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt die Indizierung einer Eigenschaft oder eines Arrays dar.
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
- Vererbung
- Implementiert
Beispiele
Im folgenden Codebeispiel wird gezeigt, wie Sie ein Objekt des IndexExpression Typs erstellen und verwenden, um einen Wert eines Arrayelements mithilfe der ArrayAccess Methode zu ändern.
// 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
Eigenschaften
| Name | Beschreibung |
|---|---|
| Arguments |
Ruft die Argumente ab, die zum Indizieren der Eigenschaft oder des Arrays verwendet werden. |
| CanReduce |
Gibt an, dass der Knoten auf einen einfacheren Knoten reduziert werden kann. Wenn dies "true" zurückgibt, kann "Reduce()" aufgerufen werden, um die reduzierte Form zu erzeugen. (Geerbt von Expression) |
| Indexer |
Ruft die PropertyInfo Für die Eigenschaft ab, wenn der Ausdruck eine indizierte Eigenschaft darstellt, gibt null andernfalls null zurück. |
| NodeType |
Gibt den Knotentyp dieses Typs Expressionzurück. |
| Object |
Ein Objekt, das indiziert werden soll. |
| Type |
Ruft den statischen Typ des Ausdrucks ab, der dies Expression darstellt. |
Methoden
| Name | Beschreibung |
|---|---|
| Accept(ExpressionVisitor) |
Verteilt an die spezifische Besuchsmethode für diesen Knotentyp. Ruft z. B. MethodCallExpression die VisitMethodCall(MethodCallExpression). (Geerbt von Expression) |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| Reduce() |
Reduziert diesen Knoten auf einen einfacheren Ausdruck. Wenn CanReduce "true" zurückgibt, sollte dieser einen gültigen Ausdruck zurückgeben. Diese Methode kann einen anderen Knoten zurückgeben, der selbst reduziert werden muss. (Geerbt von Expression) |
| ReduceAndCheck() |
Reduziert diesen Knoten auf einen einfacheren Ausdruck. Wenn CanReduce "true" zurückgibt, sollte dieser einen gültigen Ausdruck zurückgeben. Diese Methode kann einen anderen Knoten zurückgeben, der selbst reduziert werden muss. (Geerbt von Expression) |
| ReduceExtensions() |
Reduziert den Ausdruck auf einen bekannten Knotentyp (der kein Erweiterungsknoten ist) oder gibt nur den Ausdruck zurück, wenn er bereits ein bekannter Typ ist. (Geerbt von Expression) |
| ToString() |
Gibt eine Textdarstellung der Expression. (Geerbt von Expression) |
| Update(Expression, IEnumerable<Expression>) |
Erstellt einen neuen Ausdruck, der wie dieser ist, aber die bereitgestellten untergeordneten Elemente verwenden. Wenn alle untergeordneten Elemente gleich sind, wird dieser Ausdruck zurückgegeben. |
| VisitChildren(ExpressionVisitor) |
Reduziert den Knoten und ruft dann den Besucherdelegat für den reduzierten Ausdruck auf. Die Methode löst eine Ausnahme aus, wenn der Knoten nicht reducierbar ist. (Geerbt von Expression) |
Explizite Schnittstellenimplementierungen
| Name | Beschreibung |
|---|---|
| IArgumentProvider.ArgumentCount |
Gibt die Anzahl der Argumente an den Ausdrucksstrukturknoten zurück. Sie sollten dieses Mitglied nicht verwenden. Sie ist nur aufgrund der Umgestaltung der Assembly öffentlich und wird intern für Leistungsoptimierungen verwendet. |
| IArgumentProvider.GetArgument(Int32) |
Gibt das Argument am Index zurück, das ausgelöst wird, wenn der Index außerhalb der Grenzen liegt. Sie sollten dieses Mitglied nicht verwenden. Sie ist nur aufgrund der Umgestaltung der Assembly öffentlich und wird intern für Leistungsoptimierungen verwendet. |