以下代码会导致异常:
string IDs = "";
IDs = IDs.Replace("", "");
为什么?
答案 0 :(得分:8)
正好在documentation for string.Replace()。如果您尝试将“oldValue”参数替换为空字符串,则会抛出异常。
Exception Condition
ArgumentException oldValue is the empty string ("").
如果您考虑一下,当您尝试在另一个字符串中找到空字符串并将其替换为某些内容时,您实际上要尝试做什么?从概念上讲它没有意义。
答案 1 :(得分:7)
String cannot be of zero length.
可能解释原因。
答案 2 :(得分:1)
它会抛出异常,因为永远找不到""
。
可以说,""
在字符串中不存在,或者在任何字符串中都有无限数量的""
。
用空字符串替换空字符串是没有意义的。
答案 3 :(得分:0)
我猜是因为string.Replace()循环遍历从0到其.Length的字符。显然,这只会跳过循环,因为没有什么东西可以循环,也许他们会因为偏执而扔掉那里?
答案 4 :(得分:0)
那么,你期待什么?
你想什么都不替换?你究竟想做什么?
让我们说旧字符串是“ABC”,在您致电Replace
后,您希望它是什么?
在这种特殊情况下,引发的异常是ArgumentException,它的文本是“String不能为零长度”。
因此,调用.Replace
方法的标准是您要替换的内容不是没有内容的字符串。
让我们查看String.Replace(String, String)的文档:
在例外下,它说:
ArgumentNullException,如果oldValue是空引用(在Visual Basic中为Nothing)。
或
ArgumentException,如果oldValue是空字符串(“”)。
所以一切都表现得像预期的那样。
答案 5 :(得分:0)
原因在于,从概念上讲,每个字符串在开头,结尾和字符之间都包含无限数量的空字符串。 (这就是为什么foo.IndexOf("")
将始终为任何字符串foo
返回0的原因。)用其他东西替换所有无限数量的空字符串对于操作来说没有任何意义。