根据参考来源
Concat(String[])
的实现方式,如下所示:
public static string Concat(params string[] values)
{
int totalLength = 0;
string[] strArray = new string[values.Length];
for (int i = 0; i < values.Length; i++)
{
string str = values[i];
totalLength += strArray[i].Length;
}
return ConcatArray(strArray, totalLength);
}
private static string ConcatArray(string[] values, int totalLength)
{
string dest = FastAllocateString(totalLength);
int destPos = 0;
for (int i = 0; i < values.Length; i++)
{
FillStringChecked(dest, destPos, values[i]);
destPos += values[i].Length;
}
return dest;
}
Concat(String, String, String)
等方法更加优化。它们避免了为参数创建字符串数组,避免了循环(每个循环都有变量、递增和检查逻辑),它们不使用变量计算总字符串长度和生成字符串中当前位置:
public static string Concat(string str0, string str1, string str2)
{
int length = (str0.Length + str1.Length) + str2.Length;
string dest = FastAllocateString(length);
FillStringChecked(dest, 0, str0);
FillStringChecked(dest, str0.Length, str1);
FillStringChecked(dest, str0.Length + str1.Length, str2);
return dest;
}
注意:我跳过了参数验证代码(空值被替换为空字符串),只显示区别。
params
是什么? - user2864740params
可以作为向后兼容的更改应用吗(例如在前向 API 中反映)?你能找到原始的 1.0 文档吗? - user2864740