我想输出一个整数为罗马数字,然后穿过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