Why is a string assigned String.Empty seen as null (C#)?
我最初有一些这样的条件代码:
1 2 3 | String _monthYr4; . . . if (_monthYr4.Length > 0) |
…但是,当在达到条件之前没有将Monthyr4分配给它时,它在运行时爆炸了,并带有一个旧的栗色,"对象引用没有设置为对象的实例。"
所以我在Monthyr4中添加了我认为是默认字符串值(尽管是空的),如下所示:
1 | private String _monthYr4 = String.Empty; |
…但它仍然以完全相同的方式崩溃。所以我最终把条件改为:
1 | if (null != _monthYr4) |
…那很好。但是为什么呢?在给字符串赋值之后,monthyr4不应该是非空的吗?它应该是空的?
在侧注中,在我将string.empty分配给monthyr4之前,它看起来是这样的:
1 | String _monthYr4; |
…但在我将string.empty分配给u monthyr4之后,Visual Studio(或Resharper,可能是吗?)自动预处理"私有"部件,以便:
1 | private String _monthYr4 = String.Empty; |
…但我不知道为什么。
稍后可能有什么东西将空值赋给了该变量。使用resharper查找所有的引用(shift-f12),并确保所有的写访问不能分配空值。