【发布时间】:2014-05-18 04:28:53
【问题描述】:
我刚刚发现Roslyn源代码,我看到一个代码sn-p看起来像这样:
var text = stringBuilder.ToString();
int length;
do
{
length = text.Length;
text = text.Replace("{\r\n\r\n", "{\r\n");
} while (text.Length != length);
在我看来奇怪,因为 String.Replace 方法一次性用新值替换所有出现的指定字符串。所以这个循环是第一次执行,然后执行更改第二次再次执行并且什么都不做。然后它就结束了.. 那么使用loop 而不是只写有什么意义:
var text = stringBuilder.ToString();
text = text.Replace("{\r\n\r\n", "{\r\n");
甚至更短:
var text = stringBuilder.ToString().Replace("{\r\n\r\n", "{\r\n");
我错过了什么吗?
【问题讨论】:
-
是的 - 你错过了字符串在括号“{”之后可能包含两个以上的换行符 - 然后它会继续删除额外的换行符,直到只剩下一个。
-
我不太喜欢那个代码,因为它很难理解。当然,它可能会快一点,但为什么不使用 String.Contains("{\r\n")?我不知道这个 sn-p 到底在哪里使用以及输入多长时间,但通常这不会显着降低程序速度。
-
@user2241553:你想用
String.Contains("{\r\n")实现什么? -
我认为这并不难理解,一条评论就会非常清楚。另外,对于大多数字符串库(以及 C# 中的字符串),String.Length 为 O(1),String.Contains 为 O(n)。当然,您可以使用正则表达式一次性完成整个替换,但是...
标签: c# loops while-loop do-while