在字符串中间插入变量值

Dar*_*Fan 34 c# string

在C#:如果我想创建这样的消息:"嗨我们有这些航班:航班A,B,C,D.你想要哪一个"

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

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

Vim*_*mes 66

现在有了(C#6,Visual Studio 2015)更简洁的方法:字符串插值.

另一个问题的答案:

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

string name = "John";
string result = $"Hello {name}";
Run Code Online (Sandbox Code Playgroud)

在Visual Studio中为此突出显示的语法使其具有高可读性,并检查所有标记.


Dan*_*zey 40

你可以使用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);
Run Code Online (Sandbox Code Playgroud)

您应该template从资源文件加载并且data是运行时值.

但是,如果要翻译成多种语言,请务必小心:在某些情况下,您需要{0}使用不同语言的不同令牌(the ).

  • @DarkNightFan:来自痛苦的经历:-)当你为从右到左的语言翻译这样的字符串时,你已经到了第七个编程圈地狱...... (3认同)

cod*_*biz 25

使用String.Format

预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);
Run Code Online (Sandbox Code Playgroud)

C#6.0 - 字符串插值

string data = "FlightA, B,C,D";
var str = $"Hi We have these flights for you: {data}. Which one do you want?";
Run Code Online (Sandbox Code Playgroud)

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


Pao*_*lla 11

String.Format("Hi We have these flights for you: {0}. Which one do you want",
                              flights);
Run Code Online (Sandbox Code Playgroud)

编辑:您甚至可以单独保存"模板"字符串(例如,您可以将其存储在配置文件中并从那里检索),如下所示:

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));
Run Code Online (Sandbox Code Playgroud)

EDIT2:哎呀,对不起我看到@DanPuzey已经提出了一些与我的编辑非常相似的东西(但更好)