既不使用 + 也不使用 StringBuilder 从变量构建字符串
Building up strings from variables by neither using + nor StringBuilder
假设我们有
string one = "1";
string two = "2";
string three = "3";
而我们想要得到结果字符串
result = "1, 2, 3"
通过以上三个变量构建它。
我知道我可以这样做
result = one + ", " + two + ", " + three;
但据我了解,然后生成了很多字符串并再次丢弃(首先1
,然后1,
,然后1, 2
,然后1, 2,
,然后 1, 2, 3
)。我知道我可以使用 StringBuilder
来防止一直创建新字符串,但这也不是我想要的。
在我的例子中,我从一开始就知道字符串的外观,我只需要将变量的引用放入结果字符串中。
我知道我以前看过一个语法(C#)。我觉得它看起来有点像这样:
result = "{0}, {1}, {2}", one, two, three
问题:
语法是什么?
在已知模式的情况下,将字符串拼凑起来的正确名称是什么?我假设有一个比 "concatenate" 更具体的词。在我的理解中,"concatenate" 是你想在运行时做的事情,当你一开始不知道要连接哪个或多少个字符串时。
- 与使用 StringBuilder
相比,在性能或内存使用方面是否存在差异?(参见 - 似乎 string.Concat
更快。)
您要找的语法是
result = String.Format("{0}, {1}, {2}", one, two, three);
这里是 string.Join
方法。与您所需的 String.Format
相比,这避免了多余的分隔符插入
string one = "1";
string two = "2";
string three = "3";
string result = string.Join(", ", one, two, three);
除了 string.join 和 string.format,您还可以使用 interpolated strings,它在许多情况下看起来比 string.format 更干净 - 例如
result = $"{one}, {two}, {three}";
- 语法是什么?
var result = string.Format("{0}, {1}, {2}", one, two, three);
or (C# 6.0 string interpolation, 只是string.Format
的语法糖)
var result = $"{one}, {two}, {three}";
- 在已知模式的情况下,将字符串拼凑起来的正确名称是什么?我假设有一个比 "concatenate" 更具体的词。在我的理解中,"concatenate" 是你想在运行时做的事情,当你一开始不知道要连接哪个或多少个字符串时。
字符串格式化或字符串插值。
- 与使用 StringBuilder 相比,在性能或内存使用方面是否存在差异?
As of .NET 4.0, string.Format
uses a cached StringBuilder
internally, so the performance difference is minimal. 对于非常大的 and/or 非常多的字符串,使用原始 StringBuilder
将是最快的,但对于大多数情况, string.Format
就足够了的性能,并且更具可读性。
假设我们有
string one = "1";
string two = "2";
string three = "3";
而我们想要得到结果字符串
result = "1, 2, 3"
通过以上三个变量构建它。
我知道我可以这样做
result = one + ", " + two + ", " + three;
但据我了解,然后生成了很多字符串并再次丢弃(首先1
,然后1,
,然后1, 2
,然后1, 2,
,然后 1, 2, 3
)。我知道我可以使用 StringBuilder
来防止一直创建新字符串,但这也不是我想要的。
在我的例子中,我从一开始就知道字符串的外观,我只需要将变量的引用放入结果字符串中。
我知道我以前看过一个语法(C#)。我觉得它看起来有点像这样:
result = "{0}, {1}, {2}", one, two, three
问题:
语法是什么?
在已知模式的情况下,将字符串拼凑起来的正确名称是什么?我假设有一个比 "concatenate" 更具体的词。在我的理解中,"concatenate" 是你想在运行时做的事情,当你一开始不知道要连接哪个或多少个字符串时。
- 与使用 (参见 - 似乎 StringBuilder
相比,在性能或内存使用方面是否存在差异?string.Concat
更快。)
您要找的语法是
result = String.Format("{0}, {1}, {2}", one, two, three);
这里是 string.Join
方法。与您所需的 String.Format
string one = "1";
string two = "2";
string three = "3";
string result = string.Join(", ", one, two, three);
除了 string.join 和 string.format,您还可以使用 interpolated strings,它在许多情况下看起来比 string.format 更干净 - 例如
result = $"{one}, {two}, {three}";
- 语法是什么?
var result = string.Format("{0}, {1}, {2}", one, two, three);
or (C# 6.0 string interpolation, 只是string.Format
的语法糖)
var result = $"{one}, {two}, {three}";
- 在已知模式的情况下,将字符串拼凑起来的正确名称是什么?我假设有一个比 "concatenate" 更具体的词。在我的理解中,"concatenate" 是你想在运行时做的事情,当你一开始不知道要连接哪个或多少个字符串时。
字符串格式化或字符串插值。
- 与使用 StringBuilder 相比,在性能或内存使用方面是否存在差异?
As of .NET 4.0, string.Format
uses a cached StringBuilder
internally, so the performance difference is minimal. 对于非常大的 and/or 非常多的字符串,使用原始 StringBuilder
将是最快的,但对于大多数情况, string.Format
就足够了的性能,并且更具可读性。