为什么.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。
答案 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)因为你可以说格式字符串不是“真正的”文本,在大多数情况下人们使用一些内联常量,如果这是一个函数的参数,它读得更好。