为什么分配给 String.Empty 的字符串被视为空值 (C#)?

Why is a string assigned String.Empty seen as null (C#)?

我原来有这样的条件代码:

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

...但是当_monthYr4在条件成立之前没有赋值,在运行的时候就炸了,老栗子,"Object reference not set to an instance of an object."

所以我将我认为是默认字符串值(尽管为空)添加到 _monthYr4,如下所示:

private String _monthYr4 = String.Empty;

...但它仍然以完全相同的方式崩溃。所以我最终将条件更改为:

if (null != _monthYr4)

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

附带说明一下,在我将 String.Empty 分配给 _monthYr4 之前,它看起来像这样:

String _monthYr4;

...但是在我将 String.Empty 分配给 _monthYr4 之后,Visual Studio(或者 Resharper,也许?)自动添加了一个 "private" 部分,因此它是:

private String _monthYr4 = String.Empty;

...但我不知道为什么。

可能稍后有人将 null 分配给该变量。使用ReSharper 查找_monthYr4 的所有引用(Shift-F12),并确保所有写访问都不能分配null。