Unsafe.Unbox<T>(Object) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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
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.
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).