Я хотел вывести целое число в римские цифры и наткнулся на этот ответ Джесси Слайсера. Это метод расширения, но мне было интересно воспользоваться преимуществом 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());
Я никогда не писал поставщика форматов, поэтому я не уверен в работе, но вот мой вопрос. Для некоторых четко определенных преобразований формата, таких как римские цифры, вы бы использовали:
- поставщик формата
- использовать метод расширения
- написать класс RomanNumeral, который реализует
Parse
, TryParse
и ToString
- что-то еще
и почему?
Влияет ли на ваш ответ использование string.Format()
и любого из методов двоюродного брата (например, StringBuilder.AppendFormat()
)? Очевидно, что с помощью методов расширения вы не можете получить доступ к преобразованию, используя один из этих методов форматирования.
Я бы подумал, что пользовательский класс для реализации всей гаммы будет наиболее разумным, но и самым трудоемким. Работа с провайдером нестандартных форматов, похоже, натолкнется на пальцы некоторых существующих вещей глобализации (если они у вас есть).