3

我在 C# 示例中看到了以下代码:

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

而且我不知道?PlayerIndex之后在做什么,它是一个枚举,并且在课堂上每个通知都在它的?后面。我的问题:它有什么作用,它叫什么以及你为什么要使用它。

我已经用谷歌搜索了这个,但它并没有让我走得太远,因为我不知道这个编码的名称,并且谷歌过滤掉了搜索查询中的问号

4

8 回答 8

9

?PlayerIndex一个NULLABLE类型。

即使它是一个或controllingPlayer基本类型,例如.NULLenumint

于 2013-06-05T09:14:36.953 回答
3

?可以为的类型。这意味着controllingPlayer可以包含null一个值。

要检查是否存在与变量关联的值,您可以使用HasValue. 要检索实际值,请使用Value

if ( controllingPlayer.HasValue )
    // now do something with controllingPlayer.Value
于 2013-06-05T09:14:46.617 回答
3

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

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

using PlayerIndex= System.Int32;
于 2013-06-05T09:14:59.983 回答
1

它的缩写Nullable<PlayerIndex>意味着您可以传递一个PlayerIndex null.

于 2013-06-05T09:15:24.500 回答
1

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

这在处理不能为空的值类型时很有用,就像引用类型一样。如果你有一个常规的int,你不能区分一个被赋予值 0 的变量和一个永远不会被写入的变量。通过将其包装在 a 中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

于 2013-06-05T09:15:31.710 回答
0

这意味着有问题的值类型是可为空的类型

于 2013-06-05T09:16:04.253 回答
0

在定义某些内容时附加?到类型是包装在 a 中的简写Nullable<T>(有关更多详细信息,请参见Nullable Types)。这意味着通常不能表示无效的值类型可以检查非值,而不是总是诉诸其默认值(即,一个int,而不是默认为0,将默认为null)。

您可以检查该事物是否具有值,并因此访问该值:

var hasValue = nullableThing.HasValue;

var underlyingValue = nullableThing.Value;
于 2013-06-05T09:16:04.663 回答
0

PlayerIndex?表示变量可以为空值。语法 T? 是 System.Nullable 的简写,其中 T 是值类型。请参阅可空类型(C# 编程指南)

于 2013-06-05T09:16:31.120 回答