Share via


Unsafe.Unbox<T>(Object) Methode

Definition

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

T

Die mutable ref für den geschachtelten Wert box.

Ausnahmen

box ist null und T ist ein nicht auf 0 (null) festlegbarer Werttyp.

box ist ein geschachtelter Werttyp.

- oder -

box ist kein geschachtelter T.

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 Tzurü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).

Gilt für: