为什么一个字符串被指定为string.Empty被视为null(C#)

本文关键字:string Empty null 一个 字符串 为什么 | 更新日期: 2023-09-27 18:22:23

我最初有一些条件代码,如下所示:

String _monthYr4;
. . .
if (_monthYr4.Length > 0)

但是,当_monthYr4在达到条件之前没有被赋值时,它在运行时爆炸了,旧的栗子是"Object reference not set to a instance of a Object"

因此,我在_monthYr4中添加了一个我认为是默认字符串值(尽管为空),如下所示:

private String _monthYr4 = String.Empty;

但它仍然以完全相同的方式坠毁。所以我最终将条件改为:

if (null != _monthYr4)

而且效果很好。但为什么呢?在为_monthYr4分配String.Empty之后,它不应该是非null吗?

顺便说一句,在我将String.Empty分配给_monthYr4之前,它看起来是这样的:

String _monthYr4;

但在我将String.Empty分配给_monthYr4之后,Visual Studio(或者Resharper,也许是?)自动地准备了一个"私有"部分,使其为:

private String _monthYr4 = String.Empty;

但我不知道为什么。

为什么一个字符串被指定为string.Empty被视为null(C#)

以后可能有什么东西将null赋值给该变量。使用ReSharper查找_monthYr4的所有引用(Shift-F12),并确保所有写访问都不能将null赋值。