Использование переменных внутри строк


91

В PHP я могу делать следующее:

$name = 'John';
$var = "Hello {$name}";    // => Hello John

Есть ли аналогичная языковая конструкция в C #?

Я знаю, что есть, String.Format();но хочу знать, можно ли это сделать без вызова функции / метода в строке.

Ответы:


225

В C # 6 вы можете использовать интерполяцию строк :

string name = "John";
string result = $"Hello {name}";

Подсветка синтаксиса в Visual Studio делает его легко читаемым, и все токены проверяются.


88

Эта функция не встроена в C # 5 или ниже.
Обновление: C # 6 теперь поддерживает интерполяцию строк, см. Новые ответы.

Рекомендуемый способ сделать это String.Format:

string name = "Scott";
string output = String.Format("Hello {0}", name);

Однако я написал небольшую библиотеку с открытым исходным кодом под названием SmartFormat, которая расширяется, String.Formatтак что она может использовать именованные заполнители (через отражение). Итак, вы могли:

string name = "Scott";
string output = Smart.Format("Hello {name}", new{name}); // Results in "Hello Scott".

Надеюсь, вам понравится!


2
Какое снижение производительности возникает при использовании вашей реализации отражения по сравнению со стандартным string.Format?
Styfle

Я вижу, у вас уже есть страница производительности в вики. Выглядит довольно многообещающе. Хорошая работа!
Styfle

Да, я считаю, что страница производительности, вероятно, отвечает на ваш вопрос, но я не проводил никаких сравнений между «Привет, {0}» и «Привет, {имя}». Очевидно, что отражение займет больше времени. Однако использование функции кэширования улучшает производительность синтаксического анализа и может минимизировать разницу. В любом случае, все БЫСТРО!
Скотт Риппи

1
Это уже не так. C # 6 добавил это как функцию
Коул Джонсон

6

Используйте следующие методы

1: Метод первый

var count = 123;
var message = $"Rows count is: {count}";

2: Метод второй

var count = 123;
var message = "Rows count is:" + count;

3: Метод третий

var count = 123;
var message = string.Format("Rows count is:{0}", count);

4: Метод четвертый

var count = 123;
var message = @"Rows
                count
                is:{0}" + count;

5: Метод пятый

var count = 123;
var message = $@"Rows 
                 count 
                 is: {count}";

1
Было бы неплохо добавить комментарий, почему вы выбрали бы использование каждого из этих методов.
ZombieCode

5

До C # 5 (-VS2013) вы должны вызывать для него функцию / метод. Либо «нормальная» функция, например, String.Formatлибо перегрузка оператора +.

string str = "Hello " + name; // This calls an overload of operator +.

В С # 6 (VS2015) была введена интерполяция строк (как описано в других ответах).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.