为什么将字符串赋值为String.Empty视为null(C#)?

时间:2015-11-18 19:53:00

标签: c# string null nullreferenceexception object-reference

我最初有一些像这样的条件代码:

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

...但是当_monthYr4未在达到条件之前被分配时,它在运行时爆炸,使用旧的栗子,“对象引用未设置为对象的实例。”

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

private String _monthYr4 = String.Empty;

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

if (null != _monthYr4)

......而且工作正常。但为什么?在为其分配String.Empty后,_monthYr4不应该为非null吗?

另一方面,在我将String.Empty分配给_monthYr4之前,它看起来像这样:

String _monthYr4;

...但是在我将String.Empty分配给_monthYr4后,Visual Studio(或者Resharper,也许?)会自动添加一个“私有”部分,使其成为:

private String _monthYr4 = String.Empty;

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

1 个答案:

答案 0 :(得分:1)

稍后可能会为该变量赋值null。使用ReSharper查找_monthYr4的所有引用(Shift-F12),并确保所有写访问都不能指定null。