我在c#示例中看到了以下代码:
public void AddScreen(GameScreen screen, PlayerIndex? controllingPlayer)
{
screen.ControllingPlayer = controllingPlayer;
screen.ScreenManager = this;
screen.IsExiting = false;
}
我不知道在PlayerIndex之后?
正在做什么,它是一个枚举,并且在课堂上每次注意它都在它后面有?
。
我的问题:它做了什么,它叫什么,你为什么要用它。
我用谷歌搜索了这个,但它没有让我走远,因为我不知道这个编码的名称和谷歌过滤掉搜索查询中的问号
答案 0 :(得分:9)
?
使PlayerIndex
成为NULLABLE
类型。
controllingPlayer
即使是NULL
或基本类型enum
,也可以是int
。
答案 1 :(得分:3)
?
是nullable类型。这意味着controllingPlayer
可以包含null
或值。
要检查是否存在与变量关联的值,您可以使用HasValue
。要检索实际值,请使用Value
if ( controllingPlayer.HasValue )
// now do something with controllingPlayer.Value
答案 2 :(得分:3)
问号表示PlayerIndex
被视为nullable
类型。
可能PlayerIndex
不是类或结构,而是int
或类似内容的枚举或别名。如果它是别名,您应该在代码中找到类似的内容:
using PlayerIndex= System.Int32;
答案 3 :(得分:1)
它是Nullable<PlayerIndex>
的缩写,表示您可以传递PlayerIndex
值或 null
。
答案 4 :(得分:1)
?
表示controllingPlayer
可以为空。它也可以写成Nullable<PlayerIndex> controllerPlayer
。
当使用不能为null的valuetypes时,这很有用,就像引用类型一样。如果您有常规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
答案 5 :(得分:0)
这意味着有问题的值类型为nullable type
答案 6 :(得分:0)
在定义某些内容时将?
附加到某个类型,这是包裹在Nullable<T>
中的简写(有关详细信息,请参阅Nullable Types)。这意味着通常无法表示无效的值类型可以检查非值,而不是总是求助于它们的默认值(即int
,而不是默认为0
,默认值到null
)。
您可以检查该事物是否具有值,并因此访问该值:
var hasValue = nullableThing.HasValue;
var underlyingValue = nullableThing.Value;
答案 7 :(得分:0)
PlayerIndex?
表示该变量可以为空值。语法T?是System.Nullable的简写,其中T是值类型。请参阅Nullable Types (C# Programming Guide)。