types之后的问号的目的是什么(例如:int?myVariable)?

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

但我已经看到了另一个用途,但无法find这个使用的解释? 运营商,例如。

 public int? myProperty { get; set; } 

这意味着所讨论的值types是可以为null的types

可空types是System.Nullable结构的实例。 可为空的types可以表示其基础值types的正确值的范围,再加上一个额外的空值。 例如,一个可为Nullable,发音为“Int32的可为空”,可以从-2147483648到2147483647分配任何值,或者可以赋予它空值。 Nullable可以被赋值true,false或null。 当您处理数据库和其他数据types(包含可能未指定值的元素)时,将null分配给数字和布尔types的function尤其有用。 例如,数据库中的布尔字段可以存储值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); } } } 

它是Nullable<int>的简写。 可以使用Nullable<T>值types不能为null。

可为空的types

可空types是System.Nullable结构的实例。 可为空的types可以表示其基础值types的正常值范围,再加上一个空值 。 例如,发音为“可为空的Int32”的[ Nullable<Int32> ]可以指定为-2147483648到2147483647之间的任何值,也可以将其指定为空值。 可以为[ Nullable<bool> ]赋值true或false,或者为null。 处理数据库和其他数据types(包含可能不被赋值的元素)时,将null分配给数字和布尔types的function特别有用。 例如,数据库中的布尔字段可以存储值true或false,或者可能是未定义的。

 x ? "yes" : "no" 

这个 宣布如果一句话。 这里: x表示布尔条件; 之前的部分是当时的句子,后面的部分是其他句子。

例如,

 int? 

这个 声明一个可为空的types,并且表示它之前的types可能有一个空值。

它声明该types是可空的。

实际用法:

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

要添加上面的答案,这里是一个代码示例

 struct Test { int something; } struct NullableTest { int something; } class Example { public void Demo() { Test t = new Test(); t = null; NullableTest? t2 = new NullableTest(); t2 = null; } } 

这会给编译错误:

错误12无法将null转换为“Test”,因为它是不可为空的值types

请注意,NullableTest没有编译错误。 (注意t2的声明中的?

要创build一个可选的,附加一个 你想包装的types之后。 任何types都可以是可选的,甚至是你自己的自定义types 你不能有一个types和

 var name: String? = "Bob" // Create an optional String that contains "Bob" var peter: Person? = Person() // An optional "Person" (custom type) // A class with a String and an optional String property class Car { var modelName: String // must exist var internalName: String? // may or may not exist }