2010-07-01 46 views
2

是否有任何理由爲什麼.net中的函數String.Format(至少用於C#和VB.net)共享和不像.split,.substring或任何正常的功能。爲什麼在.net String.Format(fmt,args,..)函數「共享」

什麼是不好

Dim a as String = "1+2={0}".format(1+2)(將是一件好事)

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

它使用此功能時,總是我的錯誤 - 這我經常做。

Thx。

+0

'Compare','Concat'和'Join'也是共享的。這些不會打擾你? – Oded 2010-07-01 09:52:30

+0

是的 - 特別加入,但這並不改變我的問題... – DanielAt 2010-07-01 09:56:27

回答

5

也許Eric Lippert仍然有設計說明,但除此之外,我不認爲這可以準確地回答。

儘管如此,作爲一種解決方法,如果你迫切需要這一點,那麼你可以寫一個擴展方法:

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

猜測是,大多數字符串的方法實際上的字符串操作,把它以直接和可預見的方式,例如Substring,ReplacePadLeft。使用Format核心字符串只是一個應用於整合操作數的模式。從概念上講,string上的大多數實例方法都可以看作是操縱string(我知道,這不是發生了什麼,我只是在此處繪製圖片),而靜態方法正好適用於此。

如上所述,只是一個猜測。最後,這可能只是一個決定,原因很快就會消失。

+0

我知道 - 已經編碼這樣的功能,只是發現它至少需要.net3.5 - 而我們的技術尖端公司仍然在。 net2.0 – DanielAt 2010-07-01 09:55:00

+1

擴展方法只需要C#3 *編譯器*,結果代碼仍然運行正常,只有.NET 2. – Joey 2010-07-01 09:57:00

+0

是的 - 但對於asp.net來說,它並不那麼容易改變編譯器(afaik)。 – DanielAt 2010-07-01 09:58:26

3

它只是一個設計決定 - 它可以真正的雙向工作。我認爲他們決定使它靜態/共享,因爲(1)歷史原因,使其更類似於C/C++(2),因爲您可以爭辯說格式字符串不是「真實」的文本,在大多數情況下,人們使用一些內聯常量,如果這是一個函數的參數,它會更好。