Я хочу сделать следующее на С# (исходя из фона Python):
strVar = "stack"
mystr = "This is %soverflow" % (strVar)
Как заменить токен внутри строки значением вне его?
Я хочу сделать следующее на С# (исходя из фона Python):
strVar = "stack"
mystr = "This is %soverflow" % (strVar)
Как заменить токен внутри строки значением вне его?
string mystr = string.Format("This is {0}overflow", strVar);
И вы также можете использовать именованные параметры вместо индексов.
Это было добавлено с С# 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.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();
Если вы в настоящее время используете Visual Studio 2015 с С# 6.0, попробуйте выполнить следующее:
var strVar = "stack";
string str = $"This is {strVar} OverFlow";
эта функция называется интерполяцией строк.
Для этого нет оператора. Вам нужно использовать string.Format
.
string strVar = "stack";
string mystr = string.Format("This is {0}soverflow", strVar);
К сожалению string.Format
является статическим методом, поэтому вы не можете просто написать "This is {0}soverflow".Format(strVar)
. Некоторые люди определили метод расширения, который позволяет использовать этот синтаксис.
Используйте string.Format
:
string mystr = string.Format("This is {0}overflow", "stack");
Вы должны использовать String.Format()
. Синтаксис немного отличается, вместо этого используются числовые заполнители.
Пример:
String.Format("item {0}, item {1}", "one", "two")
Посмотрите http://msdn.microsoft.com/en-us/library/system.string.format.aspx для более подробной информации.
У вас есть 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";
Использование:
strVar = "stack"
mystr = String.Format("This is {0}", strVar);
Есть еще один способ реализовать placeholders с string.Replace, странно помогает в определенных ситуациях:
mystr = mystr.Replace("%soverflow", strVar);
Вы можете использовать следующий способ
Строковая интерполяция
Специальный символ $ идентифицирует строковый литерал как интерполированную строку. например
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));
Вы можете выполнить это с помощью Expansive: https://github.com/anderly/Expansive