我在很多采访中一再被问到以下问题......但仍然无法用一个简单的例子来解释它们......
有什么建议?
Adr*_*der 34
从使用Nullable类型(C#编程指南)(链接更新大约2018年)
有关何时可以使用可空类型的示例,请考虑普通布尔变量如何具有两个值:true和false.没有值表示"未定义".在许多编程应用程序中,最值得注意的是数据库交互,变量可以以未定义的状态存在.例如,数据库中的字段可能包含值true或false,但它也可能根本不包含任何值.同样,可以将引用类型设置为null以指示它们未初始化.
San*_*der 20
Null表示"无价值"或"无数据".当"无值"是您正在设计/使用的任何系统的上下文中的有效值时,可以使用可空类型.
int? weightOfCargo = TryGetTruckCargoWeight()
Run Code Online (Sandbox Code Playgroud)
在这种情况下,可空类型表示TryGetTruckCargoWeight()可能返回null.这通常意味着数据不可用(可能没有卡车,可能没有称重等).
考虑以下示例:
工具具有通过UI指定的设置.但是,也可以从命令行运行该工具,并且可以通过命令行覆盖UI中指定的设置.所以代码如下:
bool? setting1;
Run Code Online (Sandbox Code Playgroud)
...处理命令行,如果设置指定do:
setting1.Value = setting;
Run Code Online (Sandbox Code Playgroud)
...后来
if(setting1.HasValue)
ui.setting1 = setting1.Value
Run Code Online (Sandbox Code Playgroud)
众所周知,C# 中有两种不同的类型
\n\n\xe2\x80\xa2引用类型
\n\xe2\x80\xa2值类型
\n引用类型可以表示为不存在的值(NULL),但 Vaue 类型不能表示 NULL 值。
\n例如
\n由于 String 是引用类型,您可以将其声明为 null
String s=null; //okRun Code Online (Sandbox Code Playgroud)\n\n但是,如果您尝试将值类型(例如 Int32)声明为 null,则会产生编译器错误
Int32 i=null; // compiler errorRun Code Online (Sandbox Code Playgroud)\n\n要在值类型中表示 null,必须使用称为可空类型的特殊构造。它用 ? 来表示。象征。
Int32? I=null; //now its okRun Code Online (Sandbox Code Playgroud)\n\n现在,在数据库编程中经常使用可为空类型的场景,其中 calss 映射到具有可为空列的表。
\n\xe2\x80\xa2 如果列是引用类型,即字符串,例如(电子邮件地址和客户地址),则没有问题,因为您可以在 C# 中将其定义为 null \
n\xe2\x80\xa2 但是如果列是双精度值类型,例如(客户帐户余额),则在不使用可空类型的情况下无法将其映射到 C#。
\n例如
\n// 映射到数据库中的客户表
\npublic class Customer\n{\n ...\n public decimal? AccountBalance;\n}\nRun Code Online (Sandbox Code Playgroud)\n