Как интерполировать строки?

106

Я хочу сделать следующее на C # (исходя из фона Python):

strVar = "stack"
mystr  = "This is %soverflow" % (strVar)

Как заменить токен внутри строки на значение вне ее?

сазр
источник

Ответы:

270

Это было добавлено в C # 6.0 (Visual Studio 2015+).

Пример:

var planetName = "Bob";
var myName = "Ford"; 
var formattedStr = $"Hello planet {planetName}, my name is {myName}!";
// formattedStr should be "Hello planet Bob, my name is Ford!"

Это синтаксический сахар для:

var formattedStr = String.Format("Hello planet {0}, my name is {1}!", planetName, myName);

Дополнительные ресурсы:

Обсуждение строковой интерполяции для C # (v2)

Предварительный просмотр языка C # 6.0

Аштонский
источник
Патч для моно (датирован 2009 годом, ваш пробег может отличаться) tirania.org/blog/archive/2009/Dec-20.html
Jefferey Cave
1
Для пользователей моно: stackoverflow.com/questions/29208869/…
Jefferey Cave 08
Эта функция такая красивая. Особенно с VS2015 и поддержкой редактора, поэтому вы можете четко видеть интерполированные строки и получать intellisense. Он даже работает с методами! $("This feature is {GetDescription(FEATURE_AMAZING))}");
Патрик
14

Вы можете использовать string.Formatдля перетаскивания значений в строки:

private static readonly string formatString = "This is {0}overflow";
...
var strVar = "stack";
var myStr = string.Format(formatString, "stack");

Альтернативой является использование оператора конкатенации C #:

var strVar = "stack";
var myStr = "This is " + strVar + "overflow";

Если вы выполняете много конкатенаций, используйте StringBuilderболее эффективный класс:

var strVar = "stack";
var stringBuilder = new StringBuilder("This is ");
for (;;)
{
    stringBuilder.Append(strVar); // spot the deliberate mistake ;-)
}
stringBuilder.Append("overflow");
var myStr = stringBuilder.ToString();
Дэвид Кларк
источник
12

C # 6.0

string mystr = $"This is {strVar}overflow";
Сильвен Родриг
источник
12

Если в настоящее время вы используете Visual Studio 2015 с C # 6.0, попробуйте следующее:

var strVar = "stack";

string str = $"This is {strVar} OverFlow";

эта функция называется строковой интерполяцией.

Сакал
источник
6

Для этого нет оператора. Вам нужно использовать string.Format.

string strVar = "stack";
string mystr  = string.Format("This is {0}soverflow", strVar);

К сожалению string.Format, это статический метод, поэтому вы не можете просто писать "This is {0}soverflow".Format(strVar). Некоторые люди определили метод расширения, который позволяет использовать этот синтаксис.

Коды
источник
5

Использование string.Format:

string mystr = string.Format("This is {0}overflow", "stack");
Мэтью Эбботт
источник
4

Вы должны использовать String.Format(). Синтаксис немного другой, вместо него используются числовые заполнители.

Пример:

String.Format("item {0}, item {1}", "one", "two")

См. Http://msdn.microsoft.com/en-us/library/system.string.format.aspx для получения дополнительных сведений.

Бруно Силва
источник
1

У вас есть 2 варианта. Вы можете использовать String.Format или оператор конкатенации.

String newString = String.Format("I inserted this string {0} into this one", oldstring);

ИЛИ

String newString = "I inserted this string " + oldstring + " into this one";
ДуэйнАллен
источник
Под обложками String.Format()использует StringBuilder. StringBuilder обычно более эффективен при конкатенации большого количества строк, но оператор конкатенации идеально подходит для одноразовых. String.Format()полезен, когда необходимо применить форматирование к выходным данным, например, чтобы добавить заполнение или начальные нули к числовым значениям. Таким образом, использование String.Format()в цикле потенциально может создать множество StringBuilders. В этой ситуации лучше использовать один StringBuilder, объявленный вне цикла и AppendFormat()внутри цикла.
Дэвид Кларк
1

Есть еще один способ реализовать заполнители с помощью string.Replace, как ни странно, помогает в определенных ситуациях:

mystr = mystr.Replace("%soverflow", strVar);
Тальха Имам
источник
1

Вы можете использовать следующий способ

Строчная интерполяция

Специальный символ $ определяет строковый литерал как интерполированную строку. например

string name = "Mark";
string surname = "D'souza";
WriteLine($"Name :{name} Surname :{surname}" );//Name :Mark Surname :D'souza  

Интерполированная строка - это строковый литерал, который может содержать интерполированные выражения. Когда интерполированная строка преобразуется в строку результата, элементы с интерполированными выражениями заменяются строковыми представлениями результатов выражения.

String.Format

Используйте String.Format, если вам нужно вставить значение объекта, переменной или выражения в другую строку.

WriteLine(String.Format("Name: {0}, Surname : {1}", name, surname));
Сунил Дхаппадхуле
источник
0

Использование:

strVar = "stack"
mystr  = String.Format("This is {0}", strVar);
Филип Нган
источник
0

Вы можете сделать это с помощью Expansive: https://github.com/anderly/Expansive

раньше
источник
В C # есть встроенный механизм интерполяции. Нет абсолютно никаких причин включать библиотеку для этой функции.
Отображаемое имя
2
@Displayname посмотрите дату на вопросе. В C # не всегда была встроенная интерполяция строк. Он был добавлен в C # 6 в 2016 году. Следовательно, причина моего ответа в 2014 году
ранее