Quería dar salida a un número entero con números romanos y me encontré con this respuesta de Jesse Slicer. Es un método de extensión, pero me preguntaba acerca de tomar ventaja de ToString(string, IFormatProvider)
hacer algo comoFormatProvider vs. método de extensión contra la nueva clase
int a = 10;
string b = a.ToString("RN", provider);
// OR
string c = string.Format(provider, "{0:RN} blah foo", a);
en lugar de
int a = 10;
string b = a.ParseRomanNumeral();
// OR
string c = string.Format("{0} blah foo", a.ParseRomanNumeral());
nunca he escrito un proveedor de formato así que no estoy seguro de la trabajo involucrado, pero esta es mi pregunta. Para algunos de conversión de formato bien definido como números romanos, habría que utilizar:
- un proveedor de formato
- usar un método de extensión
- escribir una clase RomanNumeral que implementa
Parse
,TryParse
, yToString
- algo más
y por qué?
¿El uso de string.Format()
y cualquiera de sus métodos primos (por ejemplo, StringBuilder.AppendFormat()
) afecta su respuesta? Obviamente, con los métodos de extensión no puede acceder a la conversión utilizando uno de estos métodos de formato.
Creo que una clase personalizada para implementar toda la gama sería más prudente pero también consumiría más tiempo. Ir con el proveedor de formato personalizado parece que se pondría al borde de algunas cosas de globalización existentes (si tiene alguna).
Los métodos de extensión anulan la capacidad de utilizar String.Format, ¿correcto? –
No realmente. Pero, ¿cómo funcionará el formato al convertir de cadena a números romanos en términos de código? – shahkalpesh
String.Format no sería para la conversión de cadena a número (no puede). Es por eso que creo que una clase RomanNumeral cubre todos los usos de la manera más elegante. –