在 C# 中:如果我想创建这样的消息:“嗨,我们为您准备了以下航班:航班 A、B、C、D。您想要哪一个”
其中只有粗体部分是动态的,我在运行时传递它的值,但它的左右部分是固定的。我可以创建类似 LeftMessage + 这些变量 + RightMessage 来创建它。但是我想知道是否有一种方法可以一次完成所有操作而无需创建两个单独的左右消息?
出于翻译目的,我将这些左右消息放在字符串资源中,所以现在我有两个单独的字符串资源。有没有办法一次完成所有事情?
您可以使用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}
不同语言的不同标记 (the )。
使用字符串格式
C# 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);
C# 6.0 --字符串插值
string data = "FlightA, B,C,D";
var str = $"Hi We have these flights for you: {data}. Which one do you want?";
String.Format("Hi We have these flights for you: {0}. Which one do you want",
flights);
编辑:您甚至可以单独保存“模板”字符串(例如,您可以将其存储在配置文件中并从那里检索),如下所示:
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 非常相似的建议(但更好一些)
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 您可以使用正则表达式类
我会使用 StringBuilder 类来进行字符串操作,因为它会更有效(可变)
string flights = "Flight A, B,C,D";
StringBuilder message = new StringBuilder();
message.Append("Hi We have these flights for you: ");
message.Append(flights);
message.Append(" . Which one do you want?");