c#语法问题

本文关键字:问题 语法 | 更新日期: 2023-09-27 18:17:13

我在一个c#示例中见过以下代码:

public void AddScreen(GameScreen screen, PlayerIndex? controllingPlayer)
{
    screen.ControllingPlayer = controllingPlayer;
    screen.ScreenManager = this;
    screen.IsExiting = false;
}

和我不知道?在PlayerIndex之后做了什么,它是一个枚举,并且在类中它的每一个通知都是与?背后。我的问题是:它是做什么的,叫什么名字,为什么要用它。

我已经谷歌这个,但它没有得到我远,因为我不知道这个编码的名称和谷歌过滤掉问号在搜索查询

c#语法问题

?使PlayerIndex成为NULLABLE类型。

这样controllingPlayer可以是NULL,即使它是enumint这样的基本类型

?是一个可空类型。这意味着controllingPlayer可以包含null或其他值。

检查变量是否有关联值,可以使用HasValue。要检索实际值,使用Value

if ( controllingPlayer.HasValue )
    // now do something with controllingPlayer.Value

问号表示PlayerIndex被视为nullable类型。

可能PlayerIndex不是类或结构体,而是int的枚举或别名或类似的东西。如果它是别名,您应该在代码中找到这样的内容:

using PlayerIndex= System.Int32;

它是Nullable<PlayerIndex>的缩写这意味着你可以传递一个PlayerIndex null

?表示controllingPlayer可以为空。也可以写成Nullable<PlayerIndex> controllerPlayer

这在处理不能为空的值类型时很有用,就像引用类型一样。如果您有一个常规的int,则无法区分给定值为0的变量和从未写入的变量。通过将其包装在Nullable<>中,您现在可以检查它是否有值:

int notNullable;  //will be initialized to 0 by default.
int? nullable;    //will be initialized to null by default.
if (nullable.HasValue)        //Do something if the variable has been given a value
{
   return nullable.Value;     //get the actual int-value
}

有关可空类型的msdn文档:http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx

这意味着所讨论的值类型是可空类型

在定义内容时将?附加到类型中,这是在Nullable<T>中包装的简写(有关详细信息,请参阅可空类型)。这意味着通常不能表示空值的值类型可以检查非值,而不是总是求助于它们的默认值(即,一个int,而不是默认为0,将默认为null)。

你可以检查这个东西是否有值,然后访问这个值:

var hasValue = nullableThing.HasValue;
var underlyingValue = nullableThing.Value;

PlayerIndex?表示该变量可以为空值。语法T?是System的简写。空的,其中T是一个值类型。