我想輸出一個整數爲羅馬數字,然後穿過Jesse Slicer的this答案。這是一個擴展方法,但我想知道關於採取的ToString(string, IFormatProvider)
優勢做類似格式提供者與擴展方法與新類
int a = 10;
string b = a.ToString("RN", provider);
// OR
string c = string.Format(provider, "{0:RN} blah foo", a);
,而不是
int a = 10;
string b = a.ParseRomanNumeral();
// OR
string c = string.Format("{0} blah foo", a.ParseRomanNumeral());
我從來沒有寫過格式提供,所以我不知道的涉及的工作,但這是我的問題。 對於一些明確定義的格式轉換像羅馬數字,你會用:
- 的格式提供
- 使用擴展方法
- 編寫實現
Parse
,TryParse
一個RomanNumeral類,並ToString
- 別的東西
爲什麼?
是否使用string.Format()
及其任何表親方法(例如StringBuilder.AppendFormat()
)會影響您的答案?顯然,使用擴展方法時,您無法使用這些格式化方法之一訪問轉換。
我認爲一個自定義類實現整個色域將是最審慎的,但也是最耗時的。使用自定義格式提供程序似乎會踩到一些現有全球化的東西(如果有的話)。
擴展方法否定使用String.Format的能力,是否正確? – 2009-07-10 19:05:57