2009-10-02 95 views

回答

7
String cannot be of zero length. 

大概解釋了原因。

8

這是正確的documentation for string.Replace()。如果嘗試用「空值」參數替換爲空字符串,則會引發異常。

Exception     Condition 
ArgumentException   oldValue is the empty string (""). 

如果你仔細想想,你實際上是想,當你試圖找到另一個字符串一個空字符串,並與東西取代它呢?從概念上講,這沒有意義。

+0

* >>你想要做什麼?*當你使用動態字符串作爲字符串查找時出現這個問題。我記得在構建編輯密碼的日誌消息時遇到過這個問題。例如,日誌(ConnectString.Replace(pw,「***」))如果密碼是空白的,我的Replace會炸燬,所以我最終創建了一個「安全替換」功能,無害地返回原始字符串,如果發現字符串爲空或空白。 – ftexperts 2016-06-29 16:21:31

1

它會拋出異常,因爲永遠不會找到""

可以爭辯說,兩個""都不存在於一個字符串中,或​​者任何字符串中都有無限數量的""

它只是簡單地用空字符串替換空字符串沒有意義。

0

我想這是因爲string.Replace()循環通過字符從0到它的.Length。顯然這隻會跳過循環,因爲沒有任何東西可以循環,也許他們扔出了偏執狂?

0

那麼,你期望什麼?

你想什麼都不用替換?你到底想做什麼?

假設舊字符串是「ABC」,那麼在您致電Replace之後,您希望它是什麼?

在這種特殊情況下,拋出的異常是ArgumentException,它的文本是「字符串不能爲零長度」。

因此,調用.Replace方法的標準是,您要替換的不是沒有內容的字符串。

讓我們來看看的String.Replace(String, String)文檔:

例外它說:

ArgumentNullException,如果屬性oldValue是空引用(在Visual Basic中爲Nothing)。

ArgumentException的,如果屬性oldValue是空字符串( 「」)。

因此,一切都表現得像預期的那樣。

0

其原因是,從概念上講,每個字符串在開始,結尾和字符之間包含無限數量的空字符串。 (這就是爲什麼foo.IndexOf("")對於任何字符串foo都將始終返回0的原因。)用其他內容替換所有無限量的空字符串是沒有意義的操作。