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. Sie ist nur aufgrund des Umgestaltens von Assemblys öffentlich und nur für interne Leistungsoptimierungen verfügbar. Es ermöglicht zwei Optimierungen, die die Größe der Strukturen reduzieren:

  1. Sie ermöglicht es den Knoten, anstelle IList<T> von ein ReadOnlyCollection<T>festzuhalten. Dies spart die Kosten für die Zuordnung der schreibgeschützten Auflistung für jeden Knoten.

  2. Dadurch können spezialisierte Unterklassen erstellt werden, die eine bestimmte Anzahl von Argumenten (z. B. Block2, Block2, Block4) enthalten. Daher vermeiden diese Knoten, sowohl ein als ReadOnlyCollection<T> auch ein Array zum Speichern ihrer Elemente zuzuweisen, wodurch 32 Bytes pro Knoten eingespart werden. Dieses Verfahren wird von verschiedenen Knoten verwendet, einschließlich BlockExpression, InvocationExpressionund MethodCallExpression.

Die Ausdrucksstrukturknoten machen weiterhin die ursprünglichen LINQ-Eigenschaften von ReadOnlyCollection<T> Objekten verfügbar. Dazu verwenden sie ein Feld erneut, um sowohl das Array als auch ein Element zu speichern, das normalerweise im Array gespeichert wird.

Für den Arrayfall wird die Auflistung in anstelle von ReadOnlyCollection<T>eingegebenIList<T>. Wenn der Knoten zunächst erstellt wird, handelt es sich um ein Array. Der Compiler oder die Hilfsprogramme in dieser Bibliothek greifen über diese Schnittstelle auf die Elemente zu. Beim Zugreifen auf Arrayelemente wird das Array zu einem ReadOnlyCollection<T>höher.

Für den Objektfall wird das erste Argument in einem Feld gespeichert, das in Objecttypisiert ist. Wenn der Knoten anfänglich erstellt wird, enthält dieses Feld das Expression des ersten Arguments. Wenn der Compiler und die Hilfsprogramme in dieser Bibliothek auf die Argumente zugreifen, verwenden sie erneut diese Schnittstelle, 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 Fall oder ReadOnlyCollection<T> behandelt. Wenn der Benutzer auf zugreift ReadOnlyCollection<T>, wird das Objektfeld aktualisiert, um direkt auf das ReadOnlyCollection<T>zu halten.

Es ist wichtig, dass Expression Eigenschaften konsistent dasselbe ReadOnlyCollection<T>zurückgeben. Andernfalls wird der von Ausdrucksbesuchern verwendete Umschreibebaumer unterbrochen. Es handelt sich um eine grundlegende Änderung von LINQ v1, die sich von demselben Expression Knoten unterscheidetReadOnlyCollection<T>. Derzeit können Sich Benutzer auf die Objektidentität verlassen, um zu erfahren, ob sich der Knoten geändert hat. Das Speichern von ReadOnlyCollection<T> in einem überladenen Feld verringert die Arbeitsspeicherauslastung und gewährleistet die Kompatibilität für die öffentliche API.

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: