既不使用 + 也不使用 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

问题:

- 与使用 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 就足够了的性能,并且更具可读性。