Наверняка, вы видели символ $ перед строкой. Этот знак говорит о том, что используется интерполяция строк c#. Этот механизм позволяет максимально удобным образом выполнять форматирование текста. Разумеется, для тех же целей можно использовать String.Format.
Подпишись на группу Вконтакте и Телеграм-канал. Там еще больше полезного контента для программистов.
А на YouTube-канале ты найдешь обучающие видео по программированию. Подписывайся!
Рассмотрим на коротком примере, что удобнее.
var one = 1;
var two = 2;
var three = 3;
var someStringForFormatting =
"Для этой строчки используется форматирование. Сосчитаем до трех {0}, {1}, {2}!";
var stringWithInterpolation =
$"Для этой строки используется интерполяция. Сосчитаем до трех {one}, {two}, {three}!";
Console.WriteLine(
String.Format(someStringForFormatting,
one,
two,
three));
Console.WriteLine();
Console.WriteLine(stringWithInterpolation);
Console.ReadLine();

Так, результат выполнения не слишком отличается. Однако, интерполяция строк в определенной степени проще в использовании. К тому же, если мы модифицируем вызов String.Format следующим образом.
Console.WriteLine(
String.Format(someStringForFormatting,
one,
two));
Получим исключение.

Говоря проще, количество переменных, переданных методу String.Format, не соответствует изначально заданному. Из-за чего мы получили ошибку.
Интерполяция строк c# — интересные механизмы
Указание формата при интерполяции
Помимо удобства форматирования строки, мы можем использовать указание формата. Это можно делать для любых переменных. Особенно удобным этот механизм можно назвать при работе с датами. Так, мы можем отображать даты в соответствии с форматом региона конечного пользователя.
var today = DateTime.Parse("2019-11-09");
var ru = $"Текущая дата: {today: dd.MM.yyyy}";
var us = $"Today: {today: yyyy.MM.dd}";
Console.WriteLine(ru);
Console.WriteLine();
Console.WriteLine(us);
Console.ReadLine();

Использование тернарного оператора
Если строка формируется по какому-либо условию, мы можем использовать тернарный оператор. Подобные строки, как правило, достаточно удобны в поддержке.
const string POSITIVE = "позитивное";
const string NEGATIVE = "отрицательное";
Console.WriteLine("Укажите число:");
var number = Convert.ToInt32(Console.ReadLine());
var message = $"Введенное число {(number > 0 ? POSITIVE : NEGATIVE)}";
Console.WriteLine(message);
Console.WriteLine("А теперь что-нибудь с другим знаком!");
number = Convert.ToInt32(Console.ReadLine());
message = $"Введенное число {(number > 0 ? POSITIVE : NEGATIVE)}";
Console.WriteLine(message);
Console.ReadLine();

Используя тернарный оператор в интерполированных строках, не забывайте оборачивать его в скобки. Как вы помните, двоеточие используется при указании формата, а потому без скобок компилятор поймет нас неправильно.
Интерполяция строк c# — Итого
Интерполяция строк c# — крайне мощный механизм, позволяющий работать с строками максимально удобным образом. По сути, этот инструмент может найти применение в любом приложении. А главное, интерполяция проста в изучении. И еще одним важным преимуществом её использования является увеличение читаемости кода и его понимания. Ведь код читают намного чаще, чем вносят в него изменения.
Кроме того, рекомендую прочитать статью String C# | Работа со строками в C#. А также подписывайтесь на группу ВКонтакте, Telegram и YouTube-канал. Там еще больше полезного и интересного для программистов.