C# 在此代码段中使用do while循环有什么意义?

C# 在此代码段中使用do while循环有什么意义?,c#,loops,while-loop,do-while,C#,Loops,While Loop,Do While,我刚刚发现了Roslyn源代码,我看到一个代码片段如下所示: var text = stringBuilder.ToString(); int length; do { length = text.Length; text = text.Replace("{\r\n\r\n", "{\r\n"); } while (text.Length != length); 我觉得这很奇怪,因为该方法一次用一个新值替换所有出现的指定字符串。因此,此循环是第一次执行,执行更改,然后再次执行第

我刚刚发现了
Roslyn
源代码,我看到一个代码片段如下所示:

var text = stringBuilder.ToString();
int length;
do
{
    length = text.Length;
    text = text.Replace("{\r\n\r\n", "{\r\n");
} while (text.Length != length);
我觉得这很奇怪,因为该方法一次用一个新值替换所有出现的指定字符串。因此,此循环是第一次执行,执行更改,然后再次执行第二次,不执行任何操作。然后就结束了。。那么,使用
循环
而不仅仅是写,有什么意义呢

var text =  stringBuilder.ToString();
text = text.Replace("{\r\n\r\n", "{\r\n");
甚至更短:

var text = stringBuilder.ToString().Replace("{\r\n\r\n", "{\r\n");

我遗漏了什么吗?

假设字符串在一个大括号后有三个空行:

"{\r\n\r\n\r\n\r\n"
第一次迭代将产生以下结果:

"{\r\n\r\n\r\n"
"{\r\n\r\n"
第二种方法将产生以下结果:

"{\r\n\r\n\r\n"
"{\r\n\r\n"
第三个将产生:

"{\r\n"

每次迭代都会删除一个空行。

是-缺少括号“{”后的字符串可能包含两个以上的换行符-然后它将继续删除额外的换行符,直到只剩下一个。

它使用递归(某种类型)处理一组替换,以暴露一组新字符,这些字符随后需要以相同的方式替换。

Yes-缺少在括号“{”后面包含两个以上换行符的字符串-然后它将继续删除额外的换行符,直到只剩下一个。我不太喜欢该代码,因为它很难理解。当然,它可能会快一点,但为什么不使用String.Contains(“{\r\n”)?我不知道这个代码段的确切位置以及输入的长度,但通常这不会明显降低程序的速度。@user2241553:使用
String.Contains(“{\r\n”)您希望实现什么
?我不认为这有那么难理解,一条注释就可以让它非常清楚。另外,对于大多数字符串库(以及C#中的字符串),string.Length是O(1),string.Contains是O(n).当然,你可以使用正则表达式一次完成整个替换,但是…我的答案更具表达力。这是有道理的。我不敢相信我错过了:)我会尽快接受。