Answers:
可空类型是System.Nullable结构的实例。可为空的类型可以表示其基础值类型的正确值范围,以及一个附加的空值。例如,可以为
Nullable<Int32>
发音为“ Int32的Nullable”分配从-2147483648到2147483647之间的任何值,也可以为其分配空值。Nullable<bool>
可以为A 分配值true,false或null。在处理包含可能未分配值的元素的数据库和其他数据类型时,为数字和布尔类型分配null的功能特别有用。例如,数据库中的布尔值字段可以存储值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); } } }
int
类型和一个对应的Integer
类。
这是的简写Nullable<int>
。Nullable<T>
用于允许将值类型设置为null
。值类型通常不能为null。
value types
不能为null。如果您声明int或bool(值类型)而没有专门分配值,则它们仍将具有值(分别为0和false),即。他们不会为空。reference types
另一方面,未分配的(例如object或MyClass)将为null。您可能想了解值类型和引用类型之间的区别。
在
x ? "yes" : "no"
的?声明一个if语句。此处:x表示布尔条件;之前的部分:就是那么一句和后一部分是别的句子。
例如,
int?
的?声明可为null的类型,并表示它之前的类型可以具有null值。
return value ? value : "isNull";
告诉我string 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',因为它是不可为空的值类型
请注意,NullableTest没有编译错误。(注意t2声明中的?)
int?
是的简写Nullable<int>
。两种形式可以互换。
Nullable<T>
是一个运算符,可以与值类型T
一起使用以使其接受null
。
如果你不知道它:值类型是接受值类型int
,bool
,char
等...
它们不能接受对值的引用:如果将它们赋给a null
,则它们会生成一个编译时错误,而不是显然可以接受它的引用类型。
你为什么需要那个?因为有时您的值类型变量可能会接收到某些操作不正常的返回的空引用,例如从数据库返回的丢失或未定义的变量。
我建议您阅读Microsoft文档,因为它很好地涵盖了该主题。