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)
我错过了什么吗?
假设字符串在打开括号后有三个空行:
"{\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)
每次迭代都会删除一个空行.