类型后面的问号的目的是什么(例如:int?myVariable)?

Gen*_*c35 418 .net c# asp.net types

通常,问号的主要用途是有条件的,x ? "yes" : "no".

但是我已经看到了它的另一个用途,但是找不到?例如运算符的这种用法的解释.

public int? myProperty
{
   get;
   set;
}
Run Code Online (Sandbox Code Playgroud)

Sea*_*ean 421

这意味着所讨论的值类型是可空类型

可空类型是System.Nullable结构的实例.可空类型可以表示其基础值类型的正确值范围,以及其他空值.例如,a Nullable<Int32>,发音为"Nullable of Int32",可以分配从-2147483648到2147483647的任何值,或者可以为其分配空值.Nullable<bool>可以为A 赋值true,false或null.在处理包含可能未赋值的元素的数据库和其他数据类型时,将null分配给numeric和Boolean类型的能力尤其有用.例如,数据库中的布尔字段可以存储值true或false,也可以是未定义的.

class NullableExample
{
  static void Main()
  {
      int? num = null;

      // Is the HasValue property true?
      if (num.HasValue)
      {
          System.Console.WriteLine("num = " + num.Value);
      }
      else
      {
          System.Console.WriteLine("num = Null");
      }

      // y is set to zero
      int y = num.GetValueOrDefault();

      // num.Value throws an InvalidOperationException if num.HasValue is false
      try
      {
          y = num.Value;
      }
      catch (System.InvalidOperationException e)
      {
          System.Console.WriteLine(e.Message);
      }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @MonsieurDart - 这就是为什么答案说"价值类型" (8认同)
  • 用于struct.不要认为它对课程有用. (3认同)
  • @AntoineDahan - 值类型没有可空类型,因为它们根据定义是不可为空的.我想你正在考虑Java,例如,有一个`int`类型和一个相应的`Integer`类. (3认同)
  • 另请注意[问号可以跟在一个对象(类型的实例)](http://www.kunal-chowdhury.com/2014/12/csharp-6-null-conditional-operators.html#t6MtXHTTG6yPywQp.97)在 C# 6(VS 2015)中 (3认同)
  • 可为空的类型的最新(2015)文档[此处](https://msdn.microsoft.com/zh-cn/library/1t3y8s4s(v = vs.140).aspx) (2认同)

Kla*_*sen 116

这是一个简写Nullable<int>.Nullable<T>用于不能为null的值类型.

  • 根据定义@problemofficer,`value types`不能为null.如果声明一个int或bool(它们是值类型)而没有专门赋值,它们仍然会有值(分别为0和false),即.他们不会是空的.另一方面,未分配的`引用类型`,例如object或MyClass,将为null.您可能想要了解值类型和引用类型之间的区别. (5认同)
  • 加上一个使用术语速记,非常直接! (3认同)
  • 第二句让我感到困惑."不能"是什么意思?在编译器级别或应用程序上下文中. (3认同)

eKe*_*ek0 58

x ? "yes" : "no"
Run Code Online (Sandbox Code Playgroud)

声明的,如果句子.这里:x表示布尔条件; 在:之前的部分是then句子,而后面的部分是else句子.

例如,在

int?
Run Code Online (Sandbox Code Playgroud)

声明可以为空的类型,并且表示它之前的类型可以具有空值.

  • 我不同意Gus的上述评论.问题表明,三元表达可能存在混淆.这个答案解决了这个问题. (34认同)
  • 我没有看到'?'之间的任何关系 声明一个null -able类型和一个三元表达式.先回答你的回答. (9认同)
  • 问题表明这与 x 无关?"yes" : "no",但是关于在类型声明之后使用问号的情况。在我看来,这是一个非常糟糕的答案。 (2认同)

Ahm*_*ıcı 48

可空类型

可空类型是System.Nullable结构的实例.可空类型可以表示其基础值类型的正常值范围,以及额外的空值.例如,Nullable<Int32>发音为"Nullable of Int32" 的[ ]可以分配从-2147483648到2147483647的任何值,或者可以为其分配空值.Nullable<bool>可以为[ ]赋值true或false,或者为null.在处理包含可能未赋值的元素的数据库和其他数据类型时,将null分配给numeric和Boolean类型的能力特别有用.例如,数据库中的布尔字段可以存储值true或false,也可以是未定义的.


Tha*_*iou 11

它声明该类型可以为空.

  • 鉴于askers样本,你的第一个条目没有意义. (2认同)

A.J*_*uer 6

实际用途:

public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
  if (value == null)
  {
    return "bad value";
  }

  return someFunctionThatHandlesIntAndReturnsString(value);
}
Run Code Online (Sandbox Code Playgroud)

  • 给我的是3小时前:-) (10认同)

Nic*_*dio 6

int?是 的简写Nullable<int>。这两种形式可以互换。

Nullable<T>是一个运算符,您可以将其与值类型一起使用T以使其接受null.

如果您不知道:值类型是接受int、等值的类型bool...char

它们不能接受对值的引用:如果您为它们分配 a ,它们会生成编译时错误null,而不是引用类型,后者显然可以接受它。

你为什么需要那个?因为有时您的值类型变量可能会收到由无法正常工作的内容返回的空引用,例如从数据库返回的丢失或未定义的变量。

我建议您阅读Microsoft 文档,因为它很好地涵盖了该主题。


小智 6

意味着用 (int?) 声明的变量可以为空

int i1=1; //ok
int i2=null; //not ok

int? i3=1; //ok
int? i4=null; //ok
Run Code Online (Sandbox Code Playgroud)