2013-11-25 44 views
0

我們正在尋找實施自定義格式化程序,按照慣例,最好使用來自Microsoft的接口,所以我找到了ICustomFormatter。IFormatProvider在ICustomFormatter

http://msdn.microsoft.com/en-us/library/system.icustomformatter.format(v=vs.110).aspx

但是該接口的簽名來提供這種:

public string Format(string format, object arg, IFormatProvider formatProvider) 
{ 

} 

我甚至會使用formatProvider呢?我還沒有看到爲什麼你關心什麼formatProvider加載了這個ICustomFormatter的例子。

我發現的唯一的例子是這樣的:

http://www.codeproject.com/Articles/6533/Custom-String-Formatting-in-NET

if (formatProvider is NumberFormatInfo) 
    if (((NumberFormatInfo)formatProvider).UseDiacritic) 
     c = diacritic; 

但這只是看起來像可怕的設計(需要一個接口,然後強耦合的話)。

我錯過了一些特殊用例嗎?

+1

IFormatProvider是不是用於允許不同區域或文化中的相同類型的數據的不同格式?因此,例如,貨幣格式輸出「$」表示en-us,「£」表示en-gb。 – acfrancis

+1

這就是你需要知道的全部http://msdn.microsoft.com/en-us/library/system.iformatprovider.getformat%28v=vs.110%29.aspx –

回答

1

IFormatProvider在那裏爲您的自定義格式化程序提供文化特定和全局格式信息。當然,取決於你的自定義格式化程序正在做什麼,你可能不需要任何這些信息,但是如果你格式化貨幣或浮點數或日期,那麼你可能需要它。

+0

Welp,應該從IFormatProvider派生類派生在ILSpy有點(特別是對於DateTime)。 – StrangeWill

相關問題