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

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

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

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

Ответ 1

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

И вы также можете использовать именованные параметры вместо индексов.

Ответ 2

Это было добавлено с С# 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);

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

String Interpolation для обсуждения в С# (v2)

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

Ответ 3

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

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

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

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();

Ответ 4

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

var strVar = "stack";

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

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

Ответ 5

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

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

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

Ответ 6

Используйте string.Format:

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

Ответ 7

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

Пример:

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

Посмотрите http://msdn.microsoft.com/en-us/library/system.string.format.aspx для более подробной информации.

Ответ 8

У вас есть 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";

Ответ 9

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

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

Ответ 10

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

mystr = mystr.Replace("%soverflow", strVar);

Ответ 11

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

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

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

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));