有没有办法在C#中按名称而不是按位置格式化字符串?
在python中,我可以这样做(厚颜无耻地从here窃取):
>>> print '%(language)s has %(#)03d quote types.' % \
{'language': "Python", "#": 2}
Python has 002 quote types.
在C#中有什么方法可以做到这一点吗?举个例子:
String.Format("{some_variable}: {some_other_variable}", ...);
能够使用变量名来实现这一点会更好,但是字典也是可以接受的。
发布于 2008-10-01 18:49:49
没有内置的方法来处理这个问题。
string myString = "{foo} is {bar} and {yadi} is {yada}".Inject(o);
Status.Text = "{UserName} last logged in at {LastLoginDate}".FormatWith(user);
A third improved method partially based on the two above,来自Phil Haack
发布于 2009-01-05 04:32:05
我刚刚在我的博客上发布了一个实现:http://haacked.com/archive/2009/01/04/fun-with-named-formats-string-parsing-and-edge-cases.aspx
它解决了这些其他实现在花括号转义方面存在的一些问题。这篇文章有详细的内容。它也做了DataBinder.Eval的事情,但仍然非常快。
发布于 2010-11-02 19:21:20
您还可以使用匿名类型,如下所示:
public string Format(string input, object p)
{
foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(p))
input = input.Replace("{" + prop.Name + "}", (prop.GetValue(p) ?? "(null)").ToString());
return input;
}
当然,如果您还想解析格式设置,则需要更多代码,但您可以使用以下函数格式化字符串,如:
Format("test {first} and {another}", new { first = "something", another = "something else" })
https://stackoverflow.com/questions/159017
复制相似问题