我想在C#中做以下事情(来自Python背景):
strVar = "stack"
mystr = "This is %soverflow" % (strVar)
如何用字符串外的值替换字符串中的标记?
string mystr = string.Format("This is {0}overflow", strVar);
而你也可以使用named parameters而不是索引。
您可以使用以下方式
字符串插值
$ special字符将字符串文字标识为插值字符串。例如
string name = "Mark";
string surname = "D'souza";
WriteLine($"Name :{name} Surname :{surname}" );//Name :Mark Surname :D'souza
插值字符串是可能包含插值表达式的字符串文字。将插值字符串解析为结果字符串时,带有插值表达式的项目将替换为表达式结果的字符串表示形式。
的String.Format
如果需要将对象,变量或表达式的值插入另一个字符串,请使用String.Format。
WriteLine(String.Format("Name: {0}, Surname : {1}", name, surname));
使用:
strVar = "stack"
mystr = String.Format("This is {0}", strVar);
您可以使用Expansive:https://github.com/anderly/Expansive完成此任务
这是在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";
该功能称为字符串插值。
没有运营商。你需要使用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。
你有2个选择。您可以使用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.Replace实现占位符,在某些情况下有点奇怪:
mystr = mystr.Replace("%soverflow", strVar);