2015-11-18 47 views
0

我本來有一些有條件的代碼是這樣的:爲什麼字符串被指定爲空(C#)的String.Empty?

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; 

...但我不知道爲什麼。

+3

你確定條件之前的代碼沒有設置您的變量設置爲null? – esskar

+4

'String.Empty'相當於''「''。有一些相關的東西沒有向我們展示。 –

+4

這不應該失敗。清理/重建您的項目。重啓Visual Studio,這個'String _monthYr4 = String.Empty; Console.WriteLine(_monthYr4.Length);'永遠不會失敗。 – Habib

回答

1

可能的東西給該變量賦值爲null以後。使用ReSharper查找_monthYr4的所有引用(Shift-F12),並確保所有寫入訪問都不能分配空值。

相關問題