我刚刚发现了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");
我错过了什么吗?
答案 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)
它正在使用递归(一种)来处理一组替换,从而暴露出一组新的集合字符,这些字符随后需要以相同的方式替换。