Unsafe.Unbox<T>(Object) Methode
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.
Gibt eine mutable ref
für einen geschachtelten Wert zurück.
public:
generic <typename T>
where T : value class static T % Unbox(System::Object ^ box);
public static ref T Unbox<T> (object box) where T : struct;
static member Unbox : obj -> 'T (requires 'T : struct)
Public Shared Function Unbox(Of T As Structure) (box As Object) As T
Typparameter
- T
Der typ, der unboxed werden soll.
Parameter
- box
- Object
Der mittels Unboxing zu konvertierende Wert.
Gibt zurück
Die mutable ref
für den geschachtelten Wert box
.
Ausnahmen
box
ist null
und T
ist ein nicht auf 0 (null) festlegbarer Werttyp.
T
kann nicht gefunden werden.
Hinweise
Die Unbox<T>
-Methode ist einfach ein Wrapper für die IL-Unbox-Anweisung . Dies ist als Leistungsoptimierung nützlich. Wenn eine API, die eine Object akzeptiert, wiederholt mit unterschiedlichen Werten eines Werttyps aufgerufen werden muss, kann dasselbe Boxobjekt wiederverwendet werden, anstatt jedes Mal ein neues zu erstellen.
Die Unbox<T>
-Methode verfügt über eine wichtige Nutzungseinschränkung, die nicht von Sprachcompilern erzwungen wird und für die der Aufrufer zuständig ist. Die IL-Anweisung unbox
gibt einen kontrollierten Veränderlichkeitszeiger zurück. Da .NET- und .NET-Sprachcompiler diese Einschränkung nicht darstellen können, gibt die Unbox<T>
-Methode einen normalen veränderlichen ref T
zurück. Entwickler dürfen den zurückgegebenen Verweis jedoch nur mutieren, wenn sie sicher sind, dass T
es sich um einen veränderlichen Strukturtyp handelt. Da die numerischen Grundtypen wie z Int32 . B. keine veränderlichen Strukturtypen sind, wird der folgende Code nicht bereitgestellt:
// The following line is NOT SUPPORTED.
Unsafe.Unbox<int>(obj) = 30;
Im Gegensatz dazu ist ein Typ wie Point eine veränderliche Struktur mit öffentlichen Eigenschaftensettern, sodass das Mutieren des boxed-Werts durch Aufrufen der Eigenschaftensetter unterstützt wird:
// The following lines are legal and supported.
Unsafe.Unbox<System.Drawing.Point>(obj).X = 50;
Unsafe.Unbox<System.Drawing.Point>(obj).Y = 70;
Das Ersetzen des gesamten Verweisgroßteils wird jedoch nicht unterstützt, auch wenn der Verweis auf einen veränderlichen Strukturtyp erfolgt.
// Resetting the reference to default(T) is NOT SUPPORTED.
Unsafe.Unbox<System.Drawing.Point>(obj) = default(System.Drawing.Point);
// Setting the reference to a completely new value is NOT SUPPORTED.
Unsafe.Unbox<System.Drawing.Point>(obj) = new System.Drawing.Point(50, 70);
Weitere Informationen, einschließlich ausführlicher Erläuterungen zu den Nutzungseinschränkungen dieser Anweisung, finden Sie in den Abschnitten III.1.8.1.2.2 ("Verwaltete Zeiger mit kontrollierter Veränderlichkeit") und III.4.32 ("Unbox -- konvertieren des geschachtelten Werttyps in seine Rohform") in ECMA-335: Common Language Infrastructure (CLI).