如何进行字符串插值?

115

我想在C#中实现以下内容(来自Python背景):

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

如何将字符串中的令牌替换为其外部的值?

16个回答

282

这是自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语言预览


Mono的补丁(日期为2009年,效果因人而异) http://tirania.org/blog/archive/2009/Dec-20.html - Jefferey Cave
1
对于Mono用户:https://dev59.com/vojca4cB1Zd3GeqP4v15 - Jefferey Cave
这个功能真是太棒了。特别是在使用VS2015和编辑器支持时,您可以清楚地看到插值字符串并获得智能感知。它甚至可以与方法一起使用!$("This feature is {GetDescription(FEATURE_AMAZING))}"); - Patrick

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

您还可以使用命名参数而不是索引。


14
你可以使用 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();

12
如果您当前正在使用带有C# 6.0的Visual Studio 2015,请尝试以下操作:

如果你当前使用 Visual Studio 2015 和 C# 6.0,请尝试以下:

var strVar = "stack";

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

那个特性被称为字符串插值。


11

C# 6.0

string mystr = $"This is {strVar}overflow";

6

没有相应的运算符,您需要使用string.Format方法。

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

很遗憾,string.Format是一个静态方法,因此您不能简单地编写"This is {0}soverflow".Format(strVar)。一些人定义了一个扩展方法,允许使用这种语法。


5

使用 string.Format

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

4

1

你有两个选项。你可以使用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";

在底层,String.Format() 使用 StringBuilder。当连接大量字符串时,StringBuilder 通常更有效率,但连接运算符适用于一次性的情况。当需要对输出应用格式化时,例如为数字值添加填充或前导零时,使用 String.Format() 很有用。因此,在循环中使用 String.Format() 可能会实例化许多 StringBuilders。在这种情况下,最好在循环外声明单个 StringBuilder,并在循环内部使用 AppendFormat() - David Clarke

0

使用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接