string.Format()与它的“bla {0} bla”语法很棒。但有时候我不想列举占位符。相反,我只想在占位符中按顺序映射变量。有没有可以做到的图书馆?
例如,而不是
string.Format("string1={0}, string2={1}", v1, v2)
类似
string.Format("string1={*}, string2={*}", v1, v2)
答案 0 :(得分:10)
现在在C#6.0中有一个叫做字符串插值的东西,所以
var name = "ozzy";
var x = string.Format("Hello {0}", name);
var y = $"Hello {name}";
等同于同样的事情。
答案 1 :(得分:5)
这是使用Regex.Replace
的可能更快的版本。 警告:当你超出范围或者没有提供足够的参数时,不支持转义{*}或错误消息!
public static class ExtensionMethods
{
private static Regex regexFormatSeq = new Regex(@"{\*}", RegexOptions.Compiled);
public static string FormatSeq(this string format, params object[] args)
{
int i = 0;
return regexFormatSeq.Replace(format, match => args[i++].ToString());
}
}
答案 2 :(得分:3)
您可以通过编写自己的字符串扩展名和params关键字来自己完成此操作,假设您使用的是.NET 3.5或更高版本。
编辑:感到无聊,代码很草率且容易出错,但是如果需要的话,请将此类放在项目中并使用其命名空间:
public static class StringExtensions
{
public static string FormatEx(this string s, params string[] parameters)
{
Regex r = new Regex(Regex.Escape("{*}"));
for (int i = 0; i < parameters.Length; i++)
{
s = r.Replace(s, parameters[i], 1);
}
return s;
}
}
<强>用法:强>
Console.WriteLine("great new {*} function {*}".FormatEx("one", "two"));
答案 3 :(得分:-1)
如果我只是写出一系列没有特殊格式的变量,我常常喜欢将它们连接起来,例如:
Console.WriteLine("string1=" + var1 + " string2=" + var2);
注意“string2”前面的前导空格,以分隔两个结果。