【发布时间】:2012-02-19 22:59:11
【问题描述】:
我想在 C# 中执行以下操作(来自 Python 背景):
strVar = "stack"
mystr = "This is %soverflow" % (strVar)
如何将字符串内的标记替换为字符串外的值?
【问题讨论】:
标签: c# string string-interpolation
我想在 C# 中执行以下操作(来自 Python 背景):
strVar = "stack"
mystr = "This is %soverflow" % (strVar)
如何将字符串内的标记替换为字符串外的值?
【问题讨论】:
标签: c# string string-interpolation
这是从 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);
其他资源:
【讨论】:
$("This feature is {GetDescription(FEATURE_AMAZING))}");
string mystr = string.Format("This is {0}overflow", strVar);
您也可以使用named parameters 代替索引。
【讨论】:
您可以使用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();
【讨论】:
如果您当前使用带有 C# 6.0 的 Visual Studio 2015,请尝试以下操作:
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了解更多详情。
【讨论】:
您有 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.Format() 使用StringBuilder。 StringBuilder 在连接大量字符串时通常更有效,但连接运算符非常适合一次性使用。 String.Format() 在需要将格式应用于输出时很有用,例如为数值添加填充或前导零。所以在循环中使用String.Format() 可能会实例化很多StringBuilders。在这种情况下,最好使用在循环外声明的单个 StringBuilder 并在循环内使用 AppendFormat()。
用途:
strVar = "stack"
mystr = String.Format("This is {0}", strVar);
【讨论】:
您可以使用 Expansive 完成此操作:https://github.com/anderly/Expansive
【讨论】:
还有另一种使用 string.Replace 实现占位符的方法,奇怪的是在某些情况下会有所帮助:
mystr = mystr.Replace("%soverflow", strVar);
【讨论】:
您可以使用以下方式
字符串插值
$ 特殊字符将字符串文字标识为内插字符串。例如
string name = "Mark";
string surname = "D'souza";
WriteLine($"Name :{name} Surname :{surname}" );//Name :Mark Surname :D'souza
内插字符串是可能包含内插表达式的字符串文字。当内插字符串解析为结果字符串时,具有内插表达式的项目将替换为表达式结果的字符串表示形式。
字符串格式
如果需要将对象、变量或表达式的值插入另一个字符串,请使用 String.Format。例如
WriteLine(String.Format("Name: {0}, Surname : {1}", name, surname));
【讨论】:
基本示例:
var name = "Vikas";
Console.WriteLine($"My name is {name}");
添加特殊字符:
string name = "John";
Console.WriteLine($"Hello, \"are you {name}?\", but not the terminator movie one :-{{");
//output-Hello, "are you John?", but not the terminator movie one :-{
不仅仅是用值替换token,你可以在C#中使用字符串插值做更多的事情
评估表达式
Console.WriteLine($"The greater one is: { Math.Max(10, 20) }");
//output - The greater one is: 20
方法调用
static void Main(string[] args)
{
Console.WriteLine($"The 5*5 is {MultipleByItSelf(5)}");
}
static int MultipleByItSelf(int num)
{
return num * num;
}
【讨论】:
您可以使用美元符号和大括号。
Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");
参见文档here。
【讨论】: