Pregunta

Un atributo XML declarado como xs: boolean puede ser aceptable '' verdadero '', '' falso '', '' 0 '' o "1". Sin embargo, en .NET, Boolean.Parse () solo aceptará " verdadero " o "falso". Si ve un '' 0 '' o "1", arroja un "Formato incorrecto" excepción.

Entonces, dado que, ¿cuál es la mejor manera de analizar dicho valor en un booleano?

(Desafortunadamente, estoy limitado a las soluciones .NET 2.0, pero si v3.5 ofrece algo, me encantaría saberlo).

¿Fue útil?

Solución

Creo que XmlConvert tiene todos los métodos para convertir entre comunes tipos de tiempo de ejecución de lenguaje y tipos XML. Especialmente XmlConvert.ToBoolean maneja exactamente los valores booleanos (las cadenas válidas son " 1 " o " true " para true y " 0 " o " false " para false).

Otros consejos

Usar CBool ?? en lugar de Boolean.Parse debería ser el truco: aunque tendrá que incrustarlo en un bloque try / catch (que no sería necesario cuando se usa Boolean. TryParse ), convertirá con éxito la mayoría de los valores booleanos 'sensibles', incluidos verdadero / falso y 0/1.

Editar: como se señaló en un comentario, esta respuesta es un poco inútil para los programadores de C #, ya que CBool ?? es un VB-ism. Se asigna a Microsoft.VisualBasic.CompilerServices.Conversions :: ToBoolean , que no es adecuado para el consumo general. Lo que hace que la clase XMLConvert señalada en la respuesta aceptada sea una alternativa aún mejor.

Desinfecte los datos antes de intentar analizarlos:

 string InnerText = yourXmlNode.InnerText;    
if (InnerText.Equals("0"))
    InnerText = "false";
else if (InnerText.Equals("1"))
    InnerText = "true";

Cualquier otra entrada que no sea verdadero , falso , 0 o 1 aún arrojará un " Formato incorrecto " ; excepción (como debería ser).

return value === 'true' || Number(value)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top