C# 6.0: String interpolation

Dziś znów o nowościach w C# 6.0. Tym razem o interpolacji string’a, który usprawni jego aktualną implementację. Należy, zaznaczyć, że ostateczna wersja nie jest jeszcze znana i wszystkie wpisy, które poświęciłem C# 6.0 mogą zostać zmienione jeszcze w oficjalnej wersji języka.

Ale po kolei… Najpierw polecam ściągnąć VS 2015, jeśli jeszcze tego nie zrobiliście. Co to jest string interpolation?Jak to w tej branży bywa, jest to skomplikowane słowo na bardzo prostą rzecz. W aktualnych wersjach języka często korzystamy z string.Format:


string firstName =...
string lastName = ...
string text = string.Format("Witaj {0} {1}", firstName, lastName);

Innymi słowy, interpolowanie stringa polega na zastąpieniu pewnych miejsc ({0} – “placeholdders”) konkretnymi wartościami.

Co jest złego w string.Format? Dla skomplikowanych wyrażeń,  jest to po prostu mało wygodne w użyciu.

Na przykład, stara wersja:

String.Format("{0}, {1}!", hello, world)

Jest równoznaczna, z napisaniem w c# 6.0 tego:

$"{hello}, {world}!"

Składnia o wiele krótsza. To dopiero jednak początek. Kolejny przykład (z oficjalnej dokumentacji na roslyn codeplex):

Będzie równoznaczny z :

$"Name = {myName}, hours = {DateTime.Now:hh}"

String.Format("Name = {0}, hours = {1:hh}", myName, DateTime.Now)

Placeholder zatem zamiast zawierać indeks zmiennej, stanowi po prostu jej nazwę.

Warto wspomnieć, że w preview na razie dostępna jest wyłącznie taka składnia:

"\{hello}, \{world}!"

Z tego co wiem, w oficjalnym wydaniu będzie $, ale to jeszcze nie jest pewne.

Składnia nie ogranicza się wyłącznie do wstawiania wartości z określonym formatowaniem. Można wykonać dowolne wyrażenie np.:

int a = 5;
Console.WriteLine("Value is \{(a>0?"positive":"negative")}");

Leave a Reply

Your email address will not be published.