【问题标题】:C# syntax questions [duplicate]C#语法问题[重复]
【发布时间】:2013-05-31 22:00:36
【问题描述】:

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

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

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

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

【问题讨论】:

  • 尝试谷歌搜索“C# 可空类型”。
  • 遇到类似问题,尝试提出更智能的谷歌查询。对于c# question mark,您会立即得到答案。
  • 在 SO 中搜索 [C#] "?" 也可以。
  • @DanielDaranas - 这要求你已经知道(大部分)答案。
  • @HenkHolterman 我试图通过提供他缺少的搜索词(“可空”)来帮助 OP,而不是批评他的问题。在我写这篇文章的时候,仍然没有答案。

标签: c# syntax enums nullable


【解决方案1】:

? 使 PlayerIndex 成为 NULLABLE 类型。

这样controllingPlayer 可以是NULL,即使它是enum 或像int 这样的基本类型。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      using PlayerIndex= System.Int32;
      

      【讨论】:

        【解决方案4】:

        它是Nullable<PlayerIndex> 的缩写,这意味着您可以传递PlayerIndex null

        【讨论】:

          【解决方案5】:

          ? 表示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

          【讨论】:

            【解决方案6】:

            表示有问题的值类型是nullable type

            【讨论】:

              【解决方案7】:

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

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

              var hasValue = nullableThing.HasValue;
              
              var underlyingValue = nullableThing.Value;
              

              【讨论】:

                【解决方案8】:

                PlayerIndex? 表示变量可以为空值。语法 T?是 System.Nullable 的简写,其中 T 是值类型。请参考Nullable Types (C# Programming Guide)

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-06-04
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-07-11
                  • 2013-12-12
                  • 2023-03-14
                  相关资源
                  最近更新 更多