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

时间:2014-04-05 21:10:01

标签: 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);

它看起来像是奇数因为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");

我错过了什么吗?

3 个答案:

答案 0 :(得分:6)

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

"{\r\n\r\n\r\n\r\n"

第一次迭代会产生这个:

"{\r\n\r\n\r\n"

第二个会产生这个:

"{\r\n\r\n"

第三个会产生:

"{\r\n"

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

答案 1 :(得分:3)

是的 - 您错过了该字符串在括号之后可能包含两个以上的换行符" {" - 然后它将继续删除其他换行符,直到只剩下一行。

答案 2 :(得分:2)

它正在使用递归(一种)来处理一组替换,从而暴露出一组新的集合字符,这些字符随后需要以相同的方式替换。