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 }