Что со знаком доллара ($ "строка" )

Я выполнял некоторые упражнения С# в книге, и я наткнулся на них, и, на мой взгляд, это сильно меня озадачило. Прямо из книги, выходная строка показывает как:

Console.WriteLine($"\n\tYour result is {result}.");

Теперь я как бы стоит, код работает, а double result отображается как ожидалось. Однако, не понимая, почему $существует в начале строки, я решил удалить его, и теперь код выводит имя массива {result} вместо содержимого. В книге не объясняется, почему, к сожалению, существует $.

Я просматривал справку VB 2015 и Google, касающуюся форматирования строк и методов перегрузки Console.WriteLine. Я не вижу ничего, что объясняет, почему это так. Любые советы будут оценены.

Ответ 1

Это новая функция в С# 6, называемая Interpolated Strings.

Самый простой способ понять это: интерполированное строковое выражение создает строку , заменяя содержащиеся выражения представлением ToString результатов выражений.

Подробнее об этом см. MSDN.

Теперь подумайте об этом немного подробнее. Почему эта функция великолепна?

Например, у вас есть класс Point:

public class Point
{
    public int X { get; set; }

    public int Y { get; set; }
}

Создайте 2 экземпляра:

var p1 = new Point { X = 5, Y = 10 };
var p2 = new Point {X = 7, Y = 3};

Теперь вы хотите вывести его на экран. 2 способа, которыми вы обычно пользуетесь:

Console.WriteLine("The area of interest is bounded by (" + p1.X + "," + p1.Y + ") and (" + p2.X + "," + p2.Y + ")");

Как вы можете видеть, конкатенация такой строки делает код трудным для чтения и подвержен ошибкам. Вы можете использовать string.Format(), чтобы сделать его более приятным:

Console.WriteLine(string.Format("The area of interest is bounded by({0},{1}) and ({2},{3})", p1.X, p1.Y, p2.X, p2.Y));

Это создает новую проблему:

  • Вам нужно поддерживать количество аргументов и индексировать себя.

По этим причинам мы должны использовать новую функцию:

Console.WriteLine($"The area of interest is bounded by ({p1.X},{p1.Y}) and ({p2.X},{p2.Y})");

Теперь компилятор поддерживает теги для вас, поэтому вам не нужно беспокоиться об индексировании правильного аргумента, потому что вы просто размещаете его прямо там в строке.

За полный пост, пожалуйста, прочитайте этот блог.

Ответ 2

Интерполяция строк

- это понятие, которое языки, подобные Perl, имели довольно долгое время; теперь хорошо получим эту способность и на С#. В String Interpolation мы просто префикс строки с помощью $(так же, как мы используем @для дословных строки). Затем мы просто окружаем выражения, которые хотим интерполировать с фигурными фигурными скобками (т.е. {и}):

Он очень похож на заполнители String.Format(), но вместо индекса он является выражением внутри фигурных скобок. На самом деле, не должно удивляться, что он выглядит как String.Format(), потому что на самом деле это все - синтаксический сахар, который компилятор рассматривает как String.Format() за кулисами.

Большая часть заключается в том, что компилятор теперь поддерживает теги для вас, поэтому вам не нужно беспокоиться об индексировании правильного аргумента, потому что вы просто размещаете его прямо там в строке.

Подробнее о С#/.NET Little Wonders: String Interpolation в С# 6