C#语法问题

时间:2013-06-05 09:12:37

标签: c# syntax enums nullable

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

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

我不知道在PlayerIndex之后?正在做什么,它是一个枚举,并且在课堂上每次注意它都在它后面有?。 我的问题:它做了什么,它叫什么,你为什么要用它。

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

8 个答案:

答案 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)