C# 6.0 - String interpolation

以往在做比較簡單的字串串接,我們可能會用 + 運算符號進行串接,或是用 String.Format 帶入 Pattern 與要串接的字串去處理,像是下面這樣:

1
2
3
4
5
...
Console.WriteLine((++idx).ToString("D2") + ". " + blog.Name + " (" + blog.Url + ")");

Console.WriteLine( String.Format( "{0:D2}. {1} ({2})", ++idx, blog.Name, blog.Url));
...


在 C# 6.0 導入了 String Interpolation,可以像下面這樣簡化寫法:

1
2
3
...
Console.WriteLine( "\{++idx, 5 :D2 }. \{blog.Name } (\{blog.Url ?? String.Empty})" );
...


有點像是本來 String.Format 的 Pattern 內直接用斜線與大括號包住帶入運算式,且支援 optional alignment 與 format specifiers 的設定。


這邊來看個完整的使用範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Collections.Generic;


public class Program
{
static void Main(string[] args)
{
var blog = new Blog
{
Name = "Level Up",
Url = "http://larrynung.github.io/"
};

var idx = 0;
Console.WriteLine((++idx).ToString( "D2") + ". " + blog.Name + " (" + blog.Url + ")");
Console.WriteLine( String.Format( "{0:D2}. {1} ({2})", ++idx, blog.Name, blog.Url));
Console.WriteLine( "\{++idx : D2 }. \{blog.Name } (\{blog.Url })");
}
}

class Blog
{
public string Name { get; set; }
public string Url { get; set; }
}


運行結果如下:


反組譯看一下,其實背後也是將其編譯成 String.Format。