首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#中的命名字符串格式

C#中的命名字符串格式
EN

Stack Overflow用户
提问于 2008-10-01 18:30:05
回答 14查看 80.1K关注 0票数 155

有没有办法在C#中按名称而不是按位置格式化字符串?

在python中,我可以这样做(厚颜无耻地从here窃取):

代码语言:javascript
复制
>>> print '%(language)s has %(#)03d quote types.' % \
      {'language': "Python", "#": 2}
Python has 002 quote types.

在C#中有什么方法可以做到这一点吗?举个例子:

代码语言:javascript
复制
String.Format("{some_variable}: {some_other_variable}", ...);

能够使用变量名来实现这一点会更好,但是字典也是可以接受的。

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2008-10-01 18:49:49

没有内置的方法来处理这个问题。

Here's one method

代码语言:javascript
复制
string myString = "{foo} is {bar} and {yadi} is {yada}".Inject(o);

Here's another

代码语言:javascript
复制
Status.Text = "{UserName} last logged in at {LastLoginDate}".FormatWith(user);

A third improved method partially based on the two above,来自Phil Haack

票数 129
EN

Stack Overflow用户

发布于 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的事情,但仍然非常快。

票数 45
EN

Stack Overflow用户

发布于 2010-11-02 19:21:20

您还可以使用匿名类型,如下所示:

代码语言:javascript
复制
    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;
    }

当然,如果您还想解析格式设置,则需要更多代码,但您可以使用以下函数格式化字符串,如:

代码语言:javascript
复制
Format("test {first} and {another}", new { first = "something", another = "something else" })
票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/159017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档