RuntimeHelpers.GetObjectValue(Object) 方法

定義

對實值類型進行 Box 動作。

C#
public static object GetObjectValue(object obj);
C#
public static object? GetObjectValue(object? obj);

參數

obj
Object

要進行 Box 的實值類型。

傳回

如果是值類別,則為 obj Boxed 複本,否則為 obj 本身。

範例

下列範例示範如何使用 方法來方塊實值類別 GetObjectValue

C#
using System;
using System.Runtime.CompilerServices;

// Declare a value type.
struct Point2I
{
    public int x;
    public int y;
}

class Program
{

    static void Main(string[] args)
    {
        // Allocate an unboxed Point2I (not on the heap).
        Point2I pnt;
        pnt.x = 0;
        pnt.y = 0;

        // Box the value.  (Put it in the heap.)
        object objPntr = RuntimeHelpers.GetObjectValue(pnt);
    }
}

備註

Boxing 實值類型會建立 物件,並將指定實值型別欄位的淺層複本執行到新的物件中。

這個方法可讓實值類別當做物件操作,同時保留實值類別的別名行為。

傳回值取決於值類別是可變還是不可變:

  • 如果指派的值是可變動的值類別,則方法會傳回類別的淺層複本,因為值類別具有複製語意。

  • 如果指派的值是不可變的值類別,則方法會傳回物件本身,而不是類別的複本。

動態類型語言的編譯程式可以使用這個方法,確保 Boxed 實值型別與未收件匣實值型別相同。 也就是說,當您四處傳遞這些類型時,會複製Boxed實值型別,而且一律會以值傳遞。 編譯程式可以呼叫 GetObjectValue 以將實值型別指派給物件,或將實值型別當做型別對象的參數傳遞。

編譯程式會使用這個方法。

適用於

產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0