¿Cómo puedo especificar una cadena de formato para un booleano que sea consistente con las otras cadenas de formato para otros tipos?
Dado el siguiente código:
double d = Math.PI; DateTime now = DateTime.Now; bool isPartyTime = true; string result = $"{d:0.0}, {now:HH:mm}, time to party? {isPartyTime}"; Puedo especificar un formato para cada tipo primitivo, excepto por lo que parece bool . Sé que puedo hacer:
string result = $"{d:0.0}, {now:HH:mm}, time to party? {(isPartyTime ? "yes!" : "no")}";Sin embargo, esto sigue siendo inconsistente con los otros tipos.
¿Hay alguna forma de formatear booleanos en cadenas interpoladas que sea consistente?
PD: busqué una respuesta que incluye este enlace:
https://stackoverflow.com/questions/tagged/c%23+string-interpolation+boolean
Y sorprendentemente tuvo cero resultados.
Desafortunadamente, no, no lo hay.
Según Microsoft , los únicos tipos de datos con cadenas de formato son:
DateTime, DateTimeOffset )System.Enum )BigInteger, Byte, Decimal, Double, Int16, Int32, Int64, SByte, Single, UInt16, UInt32, UInt64 )GuidTimeSpan Boolean.ToString() solo puede devolver "Verdadero" o "Falso". Incluso dice que si necesita escribirlo en XML, debe realizar manualmente ToLowerCase() (por la falta de formato de cadena).
Esto puede parecer obvio, pero para reducir la repetición, siempre puede crear un método de extensión. Te lleva a la mitad del camino por lo menos.
public static class MyExtensions { public static string ToYesNo(this bool boolValue) { return boolValue ? "Yes" : "No"; } } static void Main(string[] args) { var booleanValue = true; Console.WriteLine(booleanValue.ToYesNo()); }