2010-02-16 30 views
5

我只注意到我能做到以下幾點,它來作爲一個完整的驚喜給我:3.5框架中的哪些方法具有類似String.Format的簽名?

Console.WriteLine("{0}:{1}:{2}", "foo", "bar", "baz"); 

此作品爲Write方法了。還有什麼其他方法可以支持這個簽名,而不需要使用String.Format

Debug.WriteLine不...
HttpResponse.WriteLine不...

(以及在一個側面說明,我無法找到Reflector尋找這個的快捷方式。什麼是好方法來搜索特定的簽名)

編輯:

專門針對3.5框架。

+0

與您的問題沒有直接關係,但大多數'ToString()'方法也會接受格式化並且可能比'String.Format'方法更快。 – 2010-02-16 17:05:07

+0

很高興看到這在C#中實現:http://tirania.org/blog/archive/2009/Dec-20.html – RedFilter 2010-02-16 19:07:27

回答

4

有很多的支持此整個框架的方法。 TextWriter的所有子類(因此StreamWriterStringWriter及其子類)將繼承支持此方法的Write方法。

另一個經常使用的例子是StringBuilder.AppendFormat

您也可以編寫自己的方法來支持這一點。您可以通過具有與格式字符串參數的重載,並與params關鍵字另一個參數,這樣做:

public void Foo(string message) { 
    // whatever 
} 

public void Foo(string format, params string[] arg) { 
    Foo(string.Format(format, arg)); 
} 
+0

*有很多方法* - 比如? **是**的問題:) – RedFilter 2010-02-16 16:42:28

+1

@Orbman:對不起!這是真的,但其他人已經提出了約4個更好的答案,我不想只是將其他人的答案提交給我的帖子。相反,我試圖想出一些可能對您或其他人有用的新信息和相關信息。 :)絕對是 – 2010-02-16 16:54:36

+0

!所有貢獻欣然接受:) – RedFilter 2010-02-16 17:00:42

4

StringBuilder實例有一個AppendFormat方法。

StringWriter實例有一個Write重載,它帶有格式參數。

+0

有趣的是,他們如何使用一個單獨的方法名稱,我假設,否則它會碰撞與'(String,Int32,Int32)'簽名。讓我想知道爲什麼他們沒有將這種方法標準化爲一致性,而是改爲使用'Debug.WriteLineFormat'方法。 – RedFilter 2010-02-16 16:48:50

0

StringBuilder類有一個名爲AppendFormat方法,其行爲以同樣的方式

1

Debug.WriteLine(string, params Object[] args)超載做到這一點爲好,在.NET 4.0中添加。

+1

這似乎僅在.NET Framework 4中受支持。在3.5中不起作用。 – RedFilter 2010-02-16 16:41:22

+0

@OrbMan - 良好的捕獲,補充說明。 – 2010-02-16 16:43:57

相關問題