55

在 C# 中:如果我想创建这样的消息:“嗨,我们为您准备了以下航班:航班 A、B、C、D。您想要哪一个”

其中只有粗体部分是动态的,我在运行时传递它的值,但它的左右部分是固定的。我可以创建类似 LeftMessage + 这些变量 + RightMessage 来创建它。但是我想知道是否有一种方法可以一次完成所有操作而无需创建两个单独的左右消息?

出于翻译目的,我将这些左右消息放在字符串资源中,所以现在我有两个单独的字符串资源。有没有办法一次完成所有事情?

4

6 回答 6

123

现在(C# 6)有一种更简洁的方法:字符串插值。

另一个问题的答案

在 C# 6 中,您可以使用字符串插值

string name = "John";
string result = $"Hello {name}";

Visual Studio 中的语法突出显示使其具有高度可读性,并且所有标记都经过检查。

于 2015-09-10T22:50:00.947 回答
61

您可以使用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 )。

于 2012-10-23T15:12:38.890 回答
35

使用字符串格式

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?";

http://www.informit.com/articles/article.aspx?p=2422807

于 2012-10-23T15:12:05.427 回答
11
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 非常相似的建议(但更好一些)

于 2012-10-23T15:11:15.800 回答
2

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 您可以使用正则表达式类

于 2012-10-23T15:11:03.840 回答
0

我会使用 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?");
于 2020-01-15T17:06:41.907 回答