簡體   English   中英

C#將對象設置為null

[英]C# setting object as null

我想將一個對象設置為null,以便可以“消費”各種對象。 在Java中,我們有這個。

//In some function/object
Vector3 position = new Vector3();

//In some loop.
if(position != null){
    consumePositionAsForce(position);
    position = null;
}

我知道在C#中,如果您使用的是基本類型buut,則必須將對象“裝箱”並“取消裝箱”,我找不到關於可空值類型的任何文檔。

我正在嘗試在C#中執行相同的操作,但是卻收到有關類型轉換的錯誤/警告。 如我不能設置Vector3 = null。

您可以使用空的類型來執行此操作:

Vector3? vector = null;

並從某個位置分配其值:

position = new Vector3();

然后,您可以像比較引用類型對象一樣輕松地將其比較為null

if(position != null) //or position.HasValue if you want
{
    //...
}

確認它不為null ,要訪問Vector3值,應使用position.Value

您可以將其聲明為可為空的Vector3(Vector3嗎?)?

Vector3? position = null;

那是我的第一個建議。 另外,您可以將其設置為Vector3.Zero,但我真的不喜歡這個想法。

我相當確定Vector3是一個值類型,而不是引用類型,因此您不能在未顯式聲明為可為空的Vector3的情況下為其分配null。

您可以使用Nullable<T>來具有可為空的值類型,其中T是一個struct (基本類型)或添加一個? 之后作為類型的前綴。 這樣,您可以將樣本的int, VectorVector3d結構設置為可空的樣本:

Vector? vector2d = null;

Vector3d? vector3d = null;

當您具有可為空的類型時,將具有兩個新屬性,即HasValue返回一個bool值,該bool值指示該對象是否存在有效值,而Value返回實際值(對於int?返回一個int )。 您可以使用如下形式:

// get a structure from a method which can return null
Vector3d? vector3d = GetVector();

// check if it has a value
if (vector3d.HasValue)
{
   // use Vector3d
   int x = vector3d.Value.X;
}

實際上, Nullable<T>類嘗試將值類型封裝為引用類型,以給您留下可以為值類型設置null的印象。

我想您知道,但我建議您閱讀更多有關裝箱和拆箱的信息

使用Vector3? (可為空的Vector3)而不是Vector3

您不能將值類型設置為null。

由於Vector3是一種結構(這是一種值類型),因此您將無法按原樣將其設置為null。

您可以使用可為空的類型,例如:

Vector3? position = null;

但是當您要在要查找常規Vector3的函數中使用它時,需要將其強制轉換為Vector3。

Vector3是一個結構,因此不能為null或可拋棄。 您可以使用

Vector3? position = null;

或者,您可以像這樣更改它:

 class Program
{
    static void Main(string[] args)
    {
        using (Vector3 position = new Vector3())
        {
            //In some loop
           consumePositionAsForce(position);
        }
    }
}

struct Vector3 : IDisposable
{
    //Whatever you want to do here
}

該結構現在是一次性的,因此您可以在using語句中使用它。 使用后將殺死該物體。 這比空值更好,因為您不會使事情復雜化,也不必擔心丟失空值檢查或發生內存中未處理的對象的事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM