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

Sel*_*enç 0 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);
Run Code Online (Sandbox Code Playgroud)

它看起来很奇怪,因为该String.Replace方法一次性用一个新值替换所有出现的指定字符串.所以这个循环首次执行,执行更改然后再次执行第二次并且什么都不做.然后它结束..那么使用a loop而不是只写的重点是什么:

var text =  stringBuilder.ToString();
text = text.Replace("{\r\n\r\n", "{\r\n");
Run Code Online (Sandbox Code Playgroud)

甚至更短:

var text = stringBuilder.ToString().Replace("{\r\n\r\n", "{\r\n");
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Jer*_*est 6

假设字符串在打开括号后有三个空行:

"{\r\n\r\n\r\n\r\n"
Run Code Online (Sandbox Code Playgroud)

第一次迭代会产生这个:

"{\r\n\r\n\r\n"
Run Code Online (Sandbox Code Playgroud)

第二个会产生这个:

"{\r\n\r\n"
Run Code Online (Sandbox Code Playgroud)

第三个会产生:

"{\r\n"
Run Code Online (Sandbox Code Playgroud)

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