为什么.net中的String.Format(fmt,args,..)函数“共享”

时间:2010-07-01 09:48:41

标签: c# .net vb.net

为什么.net中的函数String.Format(至少对于C#和VB.net)共享而不是像.split,.substring或者任何正常的函数一样,是否有任何理智的原因。

会有什么坏处

Dim a as String = "1+2={0}".format(1+2)(会很好)

VS

Dim a as String = String.Format("1+2={0}",1+2)(它的工作方式)

使用此功能时总是让我感到烦恼 - 我经常这样做。

THX。

2 个答案:

答案 0 :(得分:5)

也许Eric Lippert仍有关于此的设计说明,但除此之外我认为不能准确回答。

但是,作为一种解决方法,如果你迫切需要这个,那么你可以写一个扩展方法:

public static string Format(this string fmt, params object[] args) {
    return string.Format(fmt, args);
}

我的猜测是大多数字符串方法实际上在字符串上操作,以直接和可预见的方式对其进行转换,例如Substring,{{1 }和Replace。使用PadLeft核心字符串只是用于将操作数集成到的模式。从概念上讲,Format上的大多数实例方法都可以被视为操纵string(我知道,这不是发生的事情,我只是在这里画一幅画),而静态方法只是在使用它

如上所述,只是一个猜测。最后,它可能只是一个决定而且原因在时间上消失了。

答案 1 :(得分:3)

它只是一个设计决定 - 它可以真正双向工作。我认为他们决定让它静态/共享,因为(1)历史原因,使它更类似于C / C ++(2)因为你可以说格式字符串不是“真正的”文本,在大多数情况下人们使用一些内联常量,如果这是一个函数的参数,它读得更好。