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之后做了什么,它是一个枚举,并且在类中它的每一个通知都是与?
背后。我的问题是:它是做什么的,叫什么名字,为什么要用它。
我已经谷歌这个,但它没有得到我远,因为我不知道这个编码的名称和谷歌过滤掉问号在搜索查询
?
使PlayerIndex
成为NULLABLE
类型。
这样controllingPlayer
可以是NULL
,即使它是enum
或int
这样的基本类型
?
是一个可空类型。这意味着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是一个值类型。