IArgumentProvider Schnittstelle
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 eine interne Schnittstelle für den Zugriff auf die Argumente mehrerer Strukturknoten bereit (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression und IndexExpression). Diese API ist nur 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 der Umgestaltung der Assembly öffentlich und nur für interne Leistungsoptimierungen vorhanden. Es ermöglicht zwei Optimierungen, die die Größe der Bäume reduzieren:
Sie ermöglicht es den Knoten, IList<T> anstelle eines .ReadOnlyCollection<T> Dies spart die Kosten für die Zuordnung der schreibgeschützten Sammlung für jeden Knoten.
Sie ermöglicht das Erstellen spezieller Unterklassen, die eine bestimmte Anzahl von Argumenten enthalten (z
Block2. B. , ,Block2Block4). Daher vermeiden diese Knoten das Zuordnen sowohl eines als ReadOnlyCollection<T> auch eines Arrays zum Speichern ihrer Elemente, wodurch 32 Bytes pro Knoten gespeichert werden. Diese Technik wird von verschiedenen Knoten verwendet, einschließlich BlockExpression, InvocationExpression, und MethodCallExpression.
Die Knoten der Ausdrucksstruktur machen weiterhin die ursprünglichen LINQ-Eigenschaften von ReadOnlyCollection<T> Objekten 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 anfangs 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 zu einem ReadOnlyCollection<T>.
Für den Objektfall wird das erste Argument in einem feld gespeichert, in Objectdas eingegeben wird. Wenn der Knoten anfänglich erstellt wird, enthält dieses Feld das Expression erste Argument. Wenn der Compiler und 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 Fall ReadOnlyCollection<T> behandelt. Wenn der Benutzer auf das ReadOnlyCollection<T>Objektfeld zugreift, wird das Objektfeld aktualisiert, um direkt auf das Objektfeld ReadOnlyCollection<T>zuzugreifen.
Es ist wichtig, dass Expression Eigenschaften konsistent dasselbe ReadOnlyCollection<T>zurückgeben. Andernfalls brechen die von Ausdrucksbesuchern verwendeten Umschreibbaumwanderer. Es ist eine bahnbrechende Änderung von LINQ v1, um anders ReadOnlyCollection<T> als derselbe Expression Knoten zurückzugeben. Derzeit können Benutzer sich auf die Objektidentität verlassen, um zu ermitteln, ob sich der Knoten geändert hat. Durch das Speichern des ReadOnlyCollection<T> Speichers in einem überladenen Feld wird die Speicherauslastung reduziert und die Kompatibilität für die öffentliche API beibehalten.
Eigenschaften
| Name | Beschreibung |
|---|---|
| ArgumentCount |
Gibt die Anzahl der Argumente an den Ausdrucksstrukturknoten zurück. Diese API ist nur für die interne Verwendung vorgesehen. |
Methoden
| Name | Beschreibung |
|---|---|
| GetArgument(Int32) |
Gibt das Argument bei |