Unsafe.Unbox<T>(Object) Metod

Definition

Returnerar ett mutable ref till ett rutat värde.

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

Typparametrar

T

Den typ som ska tas bort.

Parametrar

box
Object

Värdet som ska avboxas.

Returer

T

A mutable ref till det boxade värdet box.

Undantag

box är null, och T är en värdetyp som inte går att nolla.

box är inte en boxad värdetyp.

-eller-

box är inte en rutad T.

T kan inte hittas.

Kommentarer

Metoden Unbox<T> är helt enkelt en omslutning för il unbox-instruktionen . Det är användbart som en prestandaoptimering. När ett API som tar ett Object måste anropas upprepade gånger med olika värden av en värdetyp, kan samma lådobjekt återanvändas i stället för ett nytt som skapas varje gång.

Metoden Unbox<T> har en viktig användningsbegränsning som inte tillämpas av språkkompilatorer och som är uppringarens ansvar. IL-instruktionen unbox returnerar en hanterad pekare med kontrollerad föränderlighet. Eftersom .NET och .NET språkkompilatorer inte kan representera den här begränsningen returnerar metoden Unbox<T> en normal föränderlig ref T. Utvecklare får dock inte mutera den returnerade referensen om de inte är säkra på att det T är en föränderlig structtyp. Eftersom de numeriska primitiverna, Int32 till exempel inte är föränderliga structtyper, är följande kod inte tilldelad:

// The following line is NOT SUPPORTED.
Unsafe.Unbox<int>(obj) = 30;

Däremot stöds en typ som Point en föränderlig struct med offentliga egenskapsuppsättningar, så att mutera det boxade värdet genom att anropa egenskapsuppsättningarna:

// The following lines are legal and supported.
Unsafe.Unbox<System.Drawing.Point>(obj).X = 50;
Unsafe.Unbox<System.Drawing.Point>(obj).Y = 70;

Att ersätta hela referensgrossistledet stöds dock inte, även om referensen är en föränderlig structtyp.

// 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);

Mer information, inklusive detaljerad information om användningsbegränsningarna i den här instruktionen, finns i avsnitten III.1.8.1.2.2 ("Hanterade pekare med kontrollerad mutabilitet") och III.4.32 ("unbox -- convert boxed value type to its raw form") i ECMA-335: Common Language Infrastructure (CLI).

Gäller för