gpt4 book ai didi

c# - String.Concat(String, String, String, String) 有什么意义

转载 作者:太空狗 更新时间:2023-10-29 22:58:53 27 4
gpt4 key购买 nike

如果您想使用 String.Concat() 连接 5 个或更多字符串,则它会使用 Concat(String[])

为什么不一直使用 Concat(String[]) 而不再需要 Concat(String, String), Concat(String , String, String)Concat(String, String, String, String)

当您想连接一个或多个字符串时,Microsoft 不只使用 Concat(String[]) 的原因是什么?

最佳答案

根据引用来源Concat(String[])以这种方式实现:

public static string Concat(params string[] values)
{
int totalLength = 0; // variable to calculate total length
string[] strArray = new string[values.Length]; // second array
for (int i = 0; i < values.Length; i++) // first loop
{
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; // variable to calculate current position
for (int i = 0; i < values.Length; i++) // second loop
{
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;
}

注意:我跳过了参数验证代码(空字符串替换为空字符串)以仅显示差异。

关于c# - String.Concat(String, String, String, String) 有什么意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24296918/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com