Классная особенность. Я просто хочу подчеркнуть, почему это лучше, чем string.format, если это не очевидно для некоторых людей.
Я прочитал, что кто-то говорит, что строка string.format соответствует "{0} {1} {2}", чтобы соответствовать параметрам. Вы не обязаны заказывать "{0} {1} {2}" в string.format, вы также можете выполнить "{2} {0} {1}". Однако, если у вас много параметров, например, 20, вы действительно хотите упорядочить строку как "{0} {1} {2} ... {19}". Если это случайный беспорядок, вам будет трудно выстроить свои параметры.
С помощью $ вы можете добавить параметр в строку без подсчета ваших параметров. Это делает код намного проще для чтения и обслуживания.
Недостатком $ является то, что вы не можете легко повторить параметр в строке, вы должны ввести его. Например, если вы устали набирать System.Environment.NewLine, вы можете выполнить string.format ("... {0} ... {0} ... {0}", System.Environment.NewLine), но в $ вы должны повторить это. Вы не можете сделать $ "{0}" и передать его в string.format, потому что $ "{0}" возвращает "0".
На примечании стороны я прочитал комментарий в другом дублированном tpoic. Я не мог комментировать, так что вот оно. Он сказал, что
string msg = n + " sheep, " + m + " chickens";
создает более одного строкового объекта. Это не правда на самом деле. Если вы делаете это в одной строке, он создает только одну строку и помещается в кеш строк.
1) string + string + string + string;
2) string.format()
3) stringBuilder.ToString()
4) $""
Все они возвращают строку и создают только одно значение в кеше.
С другой стороны:
string+= string2;
string+= string2;
string+= string2;
string+= string2;
Создает 4 разных значения в кеше, потому что есть 4 ";".
Таким образом, будет проще написать код, подобный следующему, но вы бы создали пять интерполированных строк, как исправил Карлос Муньос:
string msg = $"Hello this is {myName}, " +
$"My phone number {myPhone}, " +
$"My email {myEmail}, " +
$"My address {myAddress}, and " +
$"My preference {myPreference}.";
Это создает одну единственную строку в кэше, в то время как у вас очень легко читаемый код. Я не уверен в производительности, но я уверен, что MS оптимизирует это, если еще не делает это.