2016-09-29 45 views
1

既不構建自變量字符串假設我們有使用+也不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(見https://stackoverflow.com/a/299541/5333340 - 似乎string.Concat更快。)

+0

也許你引用[string.Format](https://msdn.microsoft.com/en-us/library/system.string.format(v = vs.110).aspx)。 –

+0

你的意思是String.Join? – BugFinder

+0

'string.Format(CultureInfo.InvariantCulture,「{0} {1}」,10,100);' – Natrium

回答

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將在性能方面不夠好,很多更具可讀性。

1

你正在尋找的語法

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

這裏是string.Join方法。這避免了相對於分隔符的冗餘插入您的需要String.Format

string one = "1"; 
string two = "2"; 
string three = "3"; 
string result = string.Join(", ", one, two, three); 
2

除的string.join和的String.Format,你也可以使用interpolated strings它看起來在許多情況下比的String.Format清潔劑 - 例如

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