Unsafe.Unbox<T>(Object) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
傳回 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 的值。
傳回
參考 boxed 值 box
的 mutable ref
。
例外狀況
box
是 null
,且 T
不可為 Null 的實值型別。
找不到 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) 。