IArgumentProvider Schnittstelle

Definition

Stellt eine interne Schnittstelle für den Zugriff auf die Argumente von mehreren Strukturknoten (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression und IndexExpression) bereit. Diese API ist ausschließlich für die interne Verwendung vorgesehen.

public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
Abgeleitet

Hinweise

Sie sollten diese API nicht verwenden. Es ist nur öffentlich, weil die Umgestaltung der Assembly erfolgt und nur für interne Leistungsoptimierungen vorhanden ist. Es ermöglicht zwei Optimierungen, die die Größe der Bäume verringern:

  1. Es ermöglicht den Knoten, IList<T> anstelle einer ReadOnlyCollection<T>. Dadurch wird die Kosten für die Zuordnung der schreibgeschützten Auflistung für jeden Knoten gespeichert.

  2. Sie ermöglicht es spezialisierten Unterklassen, die in einer bestimmten Anzahl von Argumenten enthalten sind (zBlock2. B. , , Block2``Block4). Daher vermeiden diese Knoten, sowohl ein ReadOnlyCollection<T> Als auch ein Array zum Speichern ihrer Elemente zu verlagern, wodurch 32 Bytes pro Knoten gespeichert werden. Diese Technik wird von verschiedenen Knoten verwendet, einschließlich BlockExpression, InvocationExpressionund MethodCallExpression.

Die Knoten der Ausdrucksstruktur machen die ursprünglichen LINQ-Eigenschaften von ReadOnlyCollection<T> Objekten weiterhin verfügbar. Dazu verwenden Sie ein Feld zum Speichern des Arrays oder eines Elements, das normalerweise im Array gespeichert wird.

Für den Arrayfall wird IList<T> die Auflistung anstelle von ReadOnlyCollection<T>. Wenn der Knoten anfänglich erstellt wird, handelt es sich um ein Array. Der Compiler oder Hilfsprogramme in dieser Bibliothek greifen über diese Schnittstelle auf die Elemente zu. Der Zugriff auf Arrayelemente fördert das Array auf ein ReadOnlyCollection<T>.

Für den Objektfall wird das erste Argument in einem Feld gespeichert, das in Object. Wenn der Knoten anfänglich erstellt wird, enthält dieses Feld das Expression erste Argument. Wenn der Compiler und die Hilfsprogramme in dieser Bibliothek auf die Argumente zugreifen, verwenden sie diese Schnittstelle erneut, und der Accessor für das erste Argument verwendet die interne Expression.ReturnObject<T>(System.Object) Hilfsmethode, um das Objekt zurückzugeben, das den Expression ReadOnlyCollection<T> Fall behandelt. Wenn der Benutzer auf das ReadOnlyCollection<T>Objektfeld zugreift, wird das Objektfeld aktualisiert, um direkt auf das ReadOnlyCollection<T>Objektfeld zuzugreifen.

Es ist wichtig, dass Expression Eigenschaften konsistent denselben ReadOnlyCollection<T>zurückgeben. Andernfalls wird der Von Ausdrucksbesuchern verwendete Umschreibbaumwanderer unterbrechen. Es ist eine unterbrechungsende Änderung von LINQ v1, um anders ReadOnlyCollection<T> als derselbe Expression Knoten zurückzugeben. Derzeit können Benutzer auf die Objektidentität angewiesen werden, um zu erkennen, ob sich der Knoten geändert hat. Das Speichern des ReadOnlyCollection<T> In einem überladenen Felds reduziert die Speicherauslastung und behält die Kompatibilität für die öffentliche API bei.

Eigenschaften

ArgumentCount

Gibt die Anzahl der Argumente für den Ausdrucksstrukturknoten zurück. Diese API ist ausschließlich für die interne Verwendung vorgesehen.

Methoden

GetArgument(Int32)

Gibt das Argument beim index zurück, das ausgelöst wird, wenn der index außerhalb des gültigen Bereichs liegt. Diese API ist ausschließlich für die interne Verwendung vorgesehen.

Gilt für