哪種方法確實是檢查空字符串的最快方法,並且有任何特定情況需要特定的情況。String.Empty,null,Length或String.IsEmptyOrNull?
1. String.IsNullOrEmpty()
2. str == null
3. str == null || str == String.Empty
4. str == null || str == ""
5. str == null || str.length == 0
哪種方法確實是檢查空字符串的最快方法,並且有任何特定情況需要特定的情況。String.Empty,null,Length或String.IsEmptyOrNull?
1. String.IsNullOrEmpty()
2. str == null
3. str == null || str == String.Empty
4. str == null || str == ""
5. str == null || str.length == 0
使用選項1.
如果你特別要檢查null
或空字符串,那麼就沒有理由使用其他任何比string.IsNullOrEmpty
。這是在.NET中這樣做的規範方式,任何性能差異幾乎都可以忽略不計。
這是premature optimization的教科書示例;盡一切辦法,寫有效的代碼,但不要浪費開發時間,因爲沒有正當的性能收益。請記住,你作爲開發人員的時間一般是遠遠比CPU的時間更有價值。
答曰高德納:
我們應該忘記小的效率,說約97%的時間:過早的優化是所有罪惡的根源。
如果這個級別的微優化對於您的應用程序是真正必需的,那麼您可能不應該使用.NET。
對於您提供的關於過早優化的鏈接+1。所以真的... – ken2k 2012-01-05 12:37:18
你也關心空白嗎?
如果空白是有效的,使用String.IsNullOrEmpty
,否則使用String.IsNullOrWhiteSpace
(在.NET 4.0或更高版本)。後者相當於,但比更高性能,String.IsNullOrEmpty(value) || value.Trim().Length == 0;
看到http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx
我個人一直使用String.IsNullOrEmpty()
。我並不認爲他們做了什麼特別的事情,除了檢查它是否是null
或空的,所以它不應該比手寫檢查慢。
此外,有時您可能會匆忙,並意外地把null
檢查結束,得到一個令人討厭的驚喜。 :)
速度的差異將是不可知的。
正確的做法是1,因爲它是最安全和最可讀的。
String.IsNullOrEmpty()
非常易讀,並且按預期工作/工作,很樂意堅持這一點。
你真的有一個邊緣情況下,它的短缺,然後請添加相同的問題,這將使其更相關。
使用
String.IsNullOrEmpty()
是基於.NET的最佳途徑。
發現這個網站上的不同方法的一些統計數據:http://www.dotnetperls.com/empty-string
它更好的方式和recomended使用String.IsNullOrEmpty爲最迅速檢查null或空字符串。因爲它在String中的內置方法。
在您的示例中,解決方案2是最快的。但它是一種與其他方法不同的解決方案,因爲它不檢查字符串是否爲空。
否則,考慮到您要檢查字符串是空還是空,解決方案5是最快的。 String.IsNullOrEmpty()與解決方案5完全相同,但添加了一個函數調用(如果它在運行時未內聯)。不過,我會推薦第一個解決方案:
1 /性能損失是可以忽略不計
2 /它更容易閱讀
3 /它是一個內置的方法,所以它是面向未來的
我必須downvote這個答案,因爲字符串變量的默認值是一個空字符串不是空字符串。儘管你所說的一切** String.IsNullOrEmpty **都是正確的。 – 2012-01-05 12:25:38
我不明白你的觀點。我在哪裏談論字符串的默認值? – 2012-01-05 12:30:13
我提到了這一點。對於您的聲明來說,這是一個否定的結果,因爲它實際上看起來並不符合作者實際想要測試的內容,因爲解決方案2的用途有限。 – 2012-01-05 13:33:53
第一個是正確的方法。因爲它的字符串是inbuit。 – 2012-01-05 12:03:43
'str'不是一個好的變量名稱 – Kane 2012-01-05 12:08:56
在這些例子中的大多數沒有區別。例如測試以查看長度是否爲0,則檢查它是否爲空字符串。在一個例子中,檢查它的null是否有點愚蠢,因爲一個字符串的默認值是一個空字符串,而不是一個空字符串。我們正在談論性能差異,你甚至不會開始測量,因爲它們可以忽略不計。停止嘗試優化簡單的任務。 – 2012-01-05 12:20:17