什么时候应该在c#中使用可空类型?

ACP*_*ACP 35 c# nullable

我在很多采访中一再被问到以下问题......但仍然无法用一个简单的例子来解释它们......

  1. 什么是c#中的可空类型?
  2. 什么时候应该在c#中使用可空类型?
  3. 你能举一个简单的例子吗?

有什么建议?

Adr*_*der 34

使用Nullable类型(C#编程指南)(链接更新大约2018年)

有关何时可以使用可空类型的示例,请考虑普通布尔变量如何具有两个值:true和false.没有值表示"未定义".在许多编程应用程序中,最值得注意的是数据库交互,变量可以以未定义的状态存在.例如,数据库中的字段可能包含值true或false,但它也可能根本不包含任何值.同样,可以将引用类型设置为null以指示它们未初始化.

  • 但任何引用(例如对象)都可以为空。所以,而不是在 `Nullable` 中装箱一个 `bool` 为什么不在 `Boolean` 中装箱它仍然让我想知道为什么.. (3认同)

San*_*der 20

Null表示"无价值"或"无数据".当"无值"是您正在设计/使用的任何系统的上下文中的有效值时,可以使用可空类型.

int? weightOfCargo = TryGetTruckCargoWeight()
Run Code Online (Sandbox Code Playgroud)

在这种情况下,可空类型表示TryGetTruckCargoWeight()可能返回null.这通常意味着数据不可用(可能没有卡车,可能没有称重等).


log*_*cnp 9

考虑以下示例:

工具具有通过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)


Kb.*_*Kb. 5

每当您使用指定值来表示空值时:
* DateTime 最小值来表示空值
* -1 来表示整数的未设置值
,那么可空类型将是更好的选择。


vij*_*ani 5

众所周知,C# 中有两种不同的类型

\n\n

\xe2\x80\xa2引用类型
\n\xe2\x80\xa2值类型
\n引用类型可以表示为不存在的值(NULL),但 Vaue 类型不能表示 NULL 值。
\n例如

\n由于 String 是引用类型,您可以将其声明为 null

\n\n
 String s=null;  //ok
Run Code Online (Sandbox Code Playgroud)\n\n

但是,如果您尝试将值类型(例如 Int32)声明为 null,则会产生编译器错误

\n\n
Int32 i=null;    // compiler error
Run Code Online (Sandbox Code Playgroud)\n\n

要在值类型中表示 null,必须使用称为可空类型的特殊构造。它用 ? 来表示。象征。

\n\n
Int32? I=null; //now its ok
Run Code Online (Sandbox Code Playgroud)\n\n

现在,在数据库编程中经常使用可为空类型的场景,其中 calss 映射到具有可为空列的表。
\n\xe2\x80\xa2 如果列是引用类型,即字符串,例如(电子邮件地址和客户地址),则没有问题,因为您可以在 C# 中将其定义为 null \
n\xe2\x80\xa2 但是如果列是双精度值类型,例如(客户帐户余额),则在不使用可空类型的情况下无法将其映射到 C#。
\n例如
\n// 映射到数据库中的客户表

\n\n
\npublic class Customer\n{\n  ...\n  public decimal? AccountBalance;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

  • @Vijay:字符串是引用类型。不是值类型 (9认同)