Вставка значений переменных в середине строки
В С#: если я хочу создать такое сообщение:
"Привет, у нас есть эти рейсы для вас: Flight A, B, C, D. Какой из них вам нужен"
где только жирный раздел является динамическим, и я передаю его значение во время выполнения, но его левая и правая части фиксированы. Я могу создать что-то вроде LeftMessage + эти переменные + RightMessage, чтобы создать это.
Но мне было интересно, есть ли способ сделать это сразу, без необходимости создавать два отдельных левых и правых сообщения?
Для целей перевода я помещаю эти левые и правые сообщения внутри строковых ресурсов, поэтому теперь у меня есть два отдельных строковых ресурса. Поэтому я хотел посмотреть, есть ли способ сделать это сразу?
Ответы
Ответ 1
Вы можете использовать string.Format
:
string template = "Hi We have these flights for you: {0}. Which one do you want";
string data = "A, B, C, D"
string message = string.Format(template, data);
Вы должны загрузить template
из своего файла ресурсов, а data
- ваши значения времени выполнения.
Будьте осторожны, если вы переводите на несколько языков: в некоторых случаях вам понадобятся разные токены ({0}
) на разных языках.
Ответ 2
Там теперь (С# 6, Visual Studio 2015) более лаконичный способ сделать это: строчная интерполяция.
От ответ на другой вопрос:
В С# 6 вы можете использовать строчную интерполяцию:
string name = "John";
string result = $"Hello {name}";
Выделение синтаксиса для этого в Visual Studio делает его очень и все токены проверяются.
Ответ 3
Используйте String.Format
Pre С# 6.0
string data = "FlightA, B,C,D";
var str = String.Format("Hi We have these flights for you: {0}. Which one do you want?", data);
С# 6.0 - Интерполяция строк
string data = "FlightA, B,C,D";
var str = $"Hi We have these flights for you: {data}. Which one do you want?";
http://www.informit.com/articles/article.aspx?p=2422807
Ответ 4
String.Format("Hi We have these flights for you: {0}. Which one do you want",
flights);
EDIT:
вы даже можете сохранить строку "шаблон" отдельно (например, вы можете сохранить ее в файле конфигурации и получить ее оттуда), например:
string flights = "Flight A, B,C,D";
string template = @"Hi We have these flights for you: {0}. Which one do you want";
Console.WriteLine(String.Format(template, flights));
EDIT2: кричит, извините, я вижу, что @DanPuzey уже предложил что-то очень похожее на мой EDIT (но несколько лучше)
Ответ 5
1 Вы можете использовать метод string.Replace
var sample = "testtesttesttest#replace#testtesttest";
var result = sample.Replace("#replace#", yourValue);
2 Вы также можете использовать string.Format
var result = string.Format("your right part {0} Your left Part", yourValue);
3 Вы можете использовать класс Regex