通过既不使用+也不使用StringBuilder来构建变量的字符串

时间:2016-09-29 08:19:03

标签: c# string string-concatenation

假设我们有

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相比,性能或内存使用情况是否存在差异?(请参阅https://stackoverflow.com/a/299541/5333340 - 似乎string.Concat更快。)< / p>

4 个答案:

答案 0 :(得分:3)

以下是string.Join方法。与您所需的String.Format

相比,这可以避免多余插入分隔符
string one = "1";
string two = "2";
string three = "3";
string result = string.Join(", ", one, two, three);

答案 1 :(得分:2)

除了string.join和string.format之外,你还可以使用interpolated strings在许多情况下看起来比string.format更清晰 - 例如。

result = $"{one}, {two}, {three}";

答案 2 :(得分:1)

您正在寻找的语法是

result = String.Format("{0}, {1}, {2}", one, two, three);

答案 3 :(得分:1)

  • 语法是什么?

var result = string.Format("{0}, {1}, {2}", one, two, three);

或(C#6.0字符串插值,这只是string.Format的语法糖)

var result = $"{one}, {two}, {three}";

  • 当模式已知时,将字符串放在一起的正确名称是什么?我假设有一个比“连接”更具体的词。在我的理解中,“连接”是你想要在运行时做的事情,当你在开始时不知道要连接哪个或多少个字符串。

字符串格式化或字符串插值。

  • 与使用StringBuilder相比,性能或内存使用量是否存在差异?

As of .NET 4.0, string.Format uses a cached StringBuilder internally, so the performance difference is minimal.对于非常大和/或非常多的字符串,使用原始StringBuilder将是最快的,但在大多数情况下,string.Format在性能方面会很好,并且更具可读性。