我想在C#中实现以下内容(来自Python背景):
strVar = "stack"
mystr = "This is %soverflow" % (strVar)
如何将字符串中的令牌替换为其外部的值?
我想在C#中实现以下内容(来自Python背景):
strVar = "stack"
mystr = "This is %soverflow" % (strVar)
如何将字符串中的令牌替换为其外部的值?
这是自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);
额外资源:
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();
如果你当前使用 Visual Studio 2015 和 C# 6.0,请尝试以下:
var strVar = "stack";
string str = $"This is {strVar} OverFlow";
那个特性被称为字符串插值。
C# 6.0
string mystr = $"This is {strVar}overflow";
没有相应的运算符,您需要使用string.Format
方法。
string strVar = "stack";
string mystr = string.Format("This is {0}soverflow", strVar);
很遗憾,string.Format
是一个静态方法,因此您不能简单地编写"This is {0}soverflow".Format(strVar)
。一些人定义了一个扩展方法,允许使用这种语法。
使用 string.Format
:
string mystr = string.Format("This is {0}overflow", "stack");
String.Format()
。语法有些不同,使用数字占位符。String.Format("item {0}, item {1}", "one", "two")
请查看http://msdn.microsoft.com/en-us/library/system.string.format.aspx以获取更多详细信息。
你有两个选项。你可以使用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使用:
strVar = "stack"
mystr = String.Format("This is {0}", strVar);
$("This feature is {GetDescription(FEATURE_AMAZING))}");
- Patrick