为什么分配给 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。
我原来有这样的条件代码:
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。