Как я могу интерполировать строки? - PullRequest
105 голосов
/ 20 февраля 2012

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

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

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

Ответы [ 12 ]

267 голосов
/ 17 ноября 2014

Это было добавлено с 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 Предварительный просмотр языка

85 голосов
/ 20 февраля 2012
string mystr = string.Format("This is {0}overflow", strVar);

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

14 голосов
/ 20 февраля 2012

Вы можете использовать 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();
11 голосов
/ 19 января 2015

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

var strVar = "stack";

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

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

6 голосов
/ 20 февраля 2012

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

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

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

5 голосов
/ 20 февраля 2012

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

string mystr = string.Format("This is {0}overflow", "stack");
4 голосов
/ 20 февраля 2012

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

Пример:

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

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

1 голос
/ 15 апреля 2019

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

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

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

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

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

String.Format

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

1 голос
/ 13 апреля 2017

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

mystr = mystr.Replace("%soverflow", strVar);
1 голос
/ 20 февраля 2012

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