Префикс перед string: '$'

203
15 сентября 2017, 18:19

Прошерстил весь свой справочник по C# и не смог найти что такое '$'.

Я понял только то, что это чем-то похоже на verbatim string '@'.

Console.WriteLine($"?");

Как это влияет на строку?

Answer 1

Префикс $ перед строкой обозначает, что далее идет интерполированная строка.

Интерполяция используется для удобного конструирования строки. При этом выражение интерполированных строк может выглядеть как шаблон строки, в котором могут быть использованы выражения языка.

Интерполированные строки легче в понимании относительно аргументов, по сравнению с композитным форматированием

Пример:

var s = $"Name = {name}, hours = {hours:hh}";

По сравнению с string.Format

var s = string.Format("Name = {0}, hours = {1:hh}", name, hours);    

Важное отличие от того же string.Format:

String interpolation is transformed at compile time to invoke an equivalent string.Format call. This leaves in place support for localization as before (though still with traditional format strings) and doesn’t introduce any post compile injection of code via strings.

Интерполированная строка в момент компиляции трансформируется в эквивалентный вызов string.Format. Это оставляет поддержку локализации как прежде (хотя все еще с традиционным форматированием строк) и не позволяет добавлять любые инъекции кода в строку, после компиляции.

Данная возможность появилась с выходом C# 6.

Подробнее можно почитать в справке на MSDN

Answer 2

Это интерполяция строк, удобная вещь, которая позволяет написать выражение:

int i=1;
Console.WriteLine($"i={i}");

Подробнее тут: https://msdn.microsoft.com/ru-ru/library/dn961160.aspx

READ ALSO
Массив в C#, код вместо индекса

Массив в C#, код вместо индекса

В php есть нечто такое:

209
CefSharp HTML5 tags

CefSharp HTML5 tags

приветИспользую CEfSharp для c wpf и есть проблема с тэгом html5

153
Прочитать длину данных из сокета c#

Прочитать длину данных из сокета c#

У меня есть клиент на c# и сервер на phpС сервера отправляю данные кодом

164