我想将一个整数输出为罗马数字,并遇到了 Jesse Slicer 的这个答案。这是一种扩展方法,但我想知道利用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
- 别的东西
为什么?
usingstring.Format()
及其任何类似方法(例如StringBuilder.AppendFormat()
)是否会影响您的答案?显然,使用扩展方法,您无法使用这些格式化方法之一访问转换。
我认为实现整个范围的自定义类将是最谨慎的,但也是最耗时的。与自定义格式提供程序一起使用似乎会踩到一些现有的全球化东西(如果有的话)。