C# 将对象设置为 null

C# setting object as null

我想将一个对象设置为 null,这样我就可以 'consume' 它的各种类型。 Java 我们有这个。

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

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

我知道在 C# 中,如果您使用原始类型,则必须 'Box' 和 'Unbox' 对象,但我找不到任何关于可空值类型的文档。

我正尝试在 C# 中做同样的事情,但我收到了关于类型转换的 errors/warning。正如我无法设置 Vector3 = null.

使用 Vector3?(可为 null 的 Vector3)代替 Vector3

能否将其声明为可为空的 Vector3(Vector3?)?

Vector3? position = null;

这是我的第一个建议。或者,您可以将其设置为 Vector3.Zero,但我不太喜欢这个主意。

我相当确定 Vector3 是值类型,而不是引用类型,因此如果不显式声明它为可为 null 的 Vector3,则不能为其分配 null。

您可以使用 nullable types 来执行此操作:

Vector3? vector = null;

并从某个地方赋值:

position = new Vector3();

然后您可以轻松地将它与 null 进行比较,就像比较引用类型对象一样:

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

验证它不是 null 后,要访问 Vector3 值,您应该使用 position.Value.

您可以使用 Nullable<T> 来获得可空值类型,其中 Tstruct(基本类型)或在后面添加 ? 作为类型。有了这个,你可以设置,例如,一个 int,一个 Vector, or Vector3d 结构可以为空,例如:

Vector? vector2d = null;

Vector3d? vector3d = null;

当您拥有可空类型时,您将拥有两个新属性,即 HasValue,其中 return 是一个 bool 值,指示该对象是否存在有效值,并且 Value 其中 return 的实际值(对于 int? return 和 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> class 试图将值类型封装为引用类型,以给人一种可以为值类型设置 null 的印象。

我想你知道,但我建议你阅读更多关于 boxing and unboxing 的内容。

您不能将值类型设置为 null。

由于 Vector3 是一个结构(它是一个值类型),您将无法将其原样设置为 null。

您可以使用可为 null 的类型,例如:

Vector3? position = null;

但是当您想在寻找常规 Vector3 的函数中使用它时,需要将其转换为 Vector3。

Vector3 是一个结构,因此不可为空或一次性。您可以使用

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 语句中使用它。这将在使用后杀死对象。这比 null 更好,因为您不会使事情过于复杂,而且您不必担心错过 null 检查或事件内存中未处理的对象。