2011-06-16 33 views
4

通常,人們會說s.Length == 0而不是s == ""更好。但是,這似乎是一種微觀優化,也使得它難以閱讀。另外,前者的一千萬與後者相比最多可節省60毫秒。爲什麼建議檢查字符串長度以確定空虛?

是否有我失蹤的原因,例如s.Length == 0實際上是否更好地表達意圖?還是通常需要比較很多字符串的空白?

編輯:我知道IsNullOrEmpty,但當人們回答這個問題時,他們經常提到長度檢查比空字符串更好。

編輯2:不要問最好的方法來做到這兩個案件將IsNullOrEmpty,但我問爲什麼這是一個不可忽視的少數人堅持認爲長度檢查是優越的。我假設他們有這麼說的很好理由,並且想知道他們是什麼。編輯3:如開頭所述,我知道其中一個比另一個快。問題是,人們推薦它的原因是什麼?有些時間表明這並沒有導致顯着差異。

+0

我與@BoltClock在這裏... – 2011-06-16 17:45:54

+3

我寧願使用'string.IsNullOrEmpty()',以防空引用異常...(意外吞下我的評論) – BoltClock 2011-06-16 17:46:30

+1

誰說「這是推薦」?它實際上是推薦的IsNullOrEmpty/IsNullOrWhitespace。 – Will 2011-06-16 17:55:36

回答

7

你說得對速度較慢,它本質上是一個微型的優化。測試長度確實可以保持FxCop /代碼分析的安靜 - 理由是性能,因爲documented in MSDN

至於哪個更具可讀性,這是主觀的,我相信任何開發人員都會明白。由於它們在語義上不同(如果s爲空則輸入s.Length == 0,而s == ""則不會),但可讀性並不是唯一需要考慮的標準。

如果您不確定字符串是否爲空,則String.IsNullOrEmptyString.IsNullOrWhiteSpace可能會更具可讀性(即表達您的意圖)。

2

的原因是這樣做s == ""你正在做一個字符串比較比其他方式(s.Length == 0

+2

不是很顯着; .net字符串知道它們的長度;這是首先檢查 – 2011-06-16 17:47:13

+0

如果兩個檢查的JIT代碼不相同,我會非常震驚。 – Josh 2011-06-16 17:56:30

+1

看起來JIT'd代碼至少必須有所不同,因爲第一個會返回false,第二個會在空字符串的情況下引發異常。 – Jamie 2011-06-16 18:03:22

1

在我的大部分代碼中,使用string.IsNullOrEmpty()string.IsNullOrWhiteSpace()(在.NET 4中)更容易閱讀,更具體地說,是我真正需要做的事情。

0

小號==的String.Empty是一個候補s.length == 0,

我爲什麼小號==「猜測」不建議是,「」將創建一個堆不可改變的字符串。只是爲了比較,你可能不想創建一個字符串對象。無論如何,有人可能會驗證我的陳述。

+1

我的印象是幾乎所有代碼中的空字符串都共享同一個實例。 – Jamie 2011-06-16 17:54:01

+0

「」是不可變的字符串文字。你可以看到(「」)會擁有一個字符串變量可以容納的所有屬性。這就是我爲你的比較而創建一個字符串對象的原因。 – SaravananArumugam 2011-06-16 18:00:18

+0

我明白了,但它似乎像所有的(「」)將引用相同的字符串,通過實習(http://stackoverflow.com/questions/263191/in-c-should-i-use-string-空或字符串空或) – Jamie 2011-06-16 18:02:20

0

不是所有點網串在運行時 這意味着s.Length == 0將在這些情況下 更快,因爲它避免了實際的字符串比較,導致如果不實習兩個字符串的一個實習 See String.IsInterned() on MSDN

相關問題