Використання змінних усередині рядків


89

У PHP я можу зробити наступне:

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

Чи існує схожа мовна конструкція в C #?

Я знаю, що є, String.Format();але я хочу знати, чи можна це зробити без виклику функції / методу в рядку.

Відповіді:


223

У C # 6 ви можете використовувати інтерполяцію рядків :

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

Виділення синтаксису для цього у Visual Studio робить його зручним для читання та перевіряє всі маркери.


87

Ця функціональність не вбудована в 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
Яке покарання за продуктивність передбачено за використання вашої реалізації відображення порівняно зі стандартним рядком. Формат?
styfle

Я бачу, у вас вже є сторінка продуктивності у вікі. Це виглядає досить перспективно. Хороша робота!
styfle

Так, я вважаю, що сторінка ефективності, ймовірно, стосується вашого запитання, але я не проводила жодного порівняння між "Привіт {0}" та "Привіт {ім'я}". Очевидно, що роздум займе більше часу. Однак використання функції кешування покращує ефективність аналізу та може мінімізувати різницю. У будь-якому випадку, все ШВИДКО!
Скотт Ріппі,

1
Це вже неправда. C # 6 додав це як особливість
Коул Джонсон

5

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

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

У C # 6 (VS2015) була введена інтерполяція рядків (як описано в інших відповідях).


5

Використовуйте наступні методи

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.