C#语法问题

3

i have seen the following code in an c# example:

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

我不知道在PlayerIndex后面的问号是什么意思,它是一个枚举,在这个类中每次提到它都带有问号。我的问题是:它是做什么的,它叫什么名字,为什么要使用它?
我已经搜索过了,但由于我不知道这个代码的名称,谷歌过滤了搜索查询中的问号,所以并没有找到很多相关信息。

3
尝试谷歌搜索"C#可空类型"。 - Daniel Daranas
尝试使用更聪明的谷歌搜索来解决类似的问题。对于c# question mark,你可以立即得到答案。 - Michal Klouda
在SO中搜索[C#] "?"也可以起作用。 - H H
@DanielDaranas - 这需要你已经知道(大部分)答案。 - H H
@HenkHolterman 我试图通过提供他所缺少的搜索词(“nullable”)来帮助OP,而不是批评他的问题。在我写这篇文章的时候,还没有答案。 - Daniel Daranas
8个回答

9

?会使PlayerIndex成为一个可空类型

这样,即使controllingPlayer是一个枚举或者一个基本类型如int,它也可以是NULL


3
< p > ? 是一种可空类型。这意味着controllingPlayer可以包含null或一个值。

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

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

3
这句话中的问号表示PlayerIndex被视为可空类型。
很可能PlayerIndex不是一个类或结构体,而是一个枚举类型或别名,代表着int或类似的东西。如果它是一个别名,你应该在代码中找到类似于这样的东西:
using PlayerIndex= System.Int32;

1

1

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

当使用值类型时非常有用,因为像引用类型一样它们不能为null。如果你有一个普通的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/zh-cn/library/1t3y8s4s(v=vs.80).aspx


0

在定义某些内容时,将?附加到类型上是用来缩写一个Nullable<T>(有关详细信息,请参见可空类型)。 这意味着通常无法表达零值的值类型可以检查非值而不总是退回到默认值(即,一个 int 而不是默认为 0 ,将默认为 null )。

您可以检查该内容是否具有值,并如下访问该值:

var hasValue = nullableThing.HasValue;

var underlyingValue = nullableThing.Value;

0

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接