C#6帶來了語法插值字符串文字編譯器的支持:多行C#插值字符串字面
var person = new { Name = "Bob" };
string s = $"Hello, {person.Name}.";
這是偉大的短字符串,但如果你想製作一個更長的字符串必須將其在單一指定線?
與其他類型的字符串,您可以:
var multi1 = string.Format(@"Height: {0}
Width: {1}
Background: {2}",
height,
width,
background);
或者:
var multi2 = string.Format(
"Height: {1}{0}" +
"Width: {2}{0}" +
"Background: {3}",
Environment.NewLine,
height,
width,
background);
我不能找到一種方法,用繩子插值實現這一目標,而不必一切一一行:
var multi3 = $"Height: {height}{Environment.NewLine}Width: {width}{Environment.NewLine}Background: {background}";
我意識到在這種情況下,您可以使用\r\n
代替Environment.NewLine
(便攜性較低),或將其拉出到本地,但會出現不能將其縮小到一行而不會損失語義強度的情況。
是不是應該將字符串插值用於長字符串?
我們應該只使用StringBuilder
來處理更長的字符串嗎?
var multi4 = new StringBuilder()
.AppendFormat("Width: {0}", width).AppendLine()
.AppendFormat("Height: {0}", height).AppendLine()
.AppendFormat("Background: {0}", background).AppendLine()
.ToString();
還是有更優雅的東西?
http://stackoverflow.com/questions/31764898/long-string-interpolation-lines-in-c6 – Ric
@DmytroShevchenko,我確實考慮過這樣做。不過,我不確定是否接受你的,因爲我看着你從Ric發佈的鏈接複製/粘貼[top voteed answer](http://stackoverflow.com/a/31764920/24874),然後編輯它看起來不同。這一切都在5分鐘內發生,因此編輯不可見。你的回答在技術上是正確的,但我覺得你應該給予信任。我實際上想接受Ric的評論,但那不可能。 –
@DrewNoakes您的問題已被標記爲由Ric鏈接的問題的副本。裏克也是標記它的人。所以沒有必要爲我的答案添加另一個鏈接的實例。如果你不同意,我會很感激你的推理。當然,我在我的答案中編輯了代碼。雖然,原因不是讓它看起來不同,而是要匹配你的問題中的例子。 –