共用方式為


Unsafe.Unbox<T>(Object) 方法

定義

傳回 mutable ref 至 boxed 值。

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

類型參數

T

要取消收件匣的型別。

參數

box
Object

要 unbox 的值。

傳回

T

參考 boxed 值 boxmutable ref

例外狀況

boxnull,且 T 不可為 Null 的實值型別。

box 不是 boxed 實值型別。

-或-

box 不是 boxed T

找不到 T

備註

方法 Unbox<T> 只是 IL unbox 指令的包裝函式。 它很適合作為效能優化。 每當需要 Object 以實數值型別不同值重複呼叫 的 API 時,就可以重複使用相同的 Box 物件,而不是每次建立新的物件。

方法 Unbox<T> 具有重要的使用條件約束,不是由語言編譯器強制執行,而且是呼叫者的責任。 IL unbox 指令會傳回受控制的可變動性 Managed 指標。 因為 .NET 和 .NET 語言編譯器無法代表這個條件約束,所以 Unbox<T> 方法會傳回一般可 ref T 變動的 。 不過,除非開發人員確定 T 是可變動的結構類型,否則不得將傳回的參考變動。 例如,因為 之類的 Int32 數值基本類型不是可變動的結構類型,所以下列程式碼不是支援:

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

相反地,這類 Point 類型是具有公用屬性 setter 的可變動結構,因此支援呼叫屬性 setter 來變更 Boxed 值:

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

不過,即使參考是可變結構類型,也不支援取代整個參考。

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

如需詳細資訊,包括本指示的使用條件約束詳細討論,請參閱 ECMA-335 中的 III.1.8.1.2.2 節 (「控制可變性受控指標」) 和 III.4.32 (「unbox -- 將 boxed 實數值型別轉換成其原始表單」) ECMA-335:Common Language Infrastructure (CLI)

適用於