Pergunta

Um atributo XML declarado como xs: boolean lata aceitável ser "verdadeira", "false", "0" ou "1". No entanto, em .NET, Boolean.Parse () só aceitará "verdadeiro" ou "falso". Se ele vê um "0" ou "1", ele lança um "Format Bad" exceção.

Assim, dado que, qual é a melhor maneira de analisar um tal valor em um booleano?

(Infelizmente, eu estou limitado a NET soluções 2.0, mas se ofertas v3.5 alguma coisa, eu adoraria ouvir sobre isso.)

Foi útil?

Solução

Eu acho que XmlConvert tem todos os métodos para a conversão entre comum tipos de tempo de execução de linguagem e tipos XML. Especialmente XmlConvert.ToBoolean alças exatamente os valores booleanos (válido cordas são "1" ou "true" para verdadeiro e "0" ou "false" para false).

Outras dicas

Usando CBool vez de Boolean.Parse deve fazer o truque: embora você tem que incorporá-lo em um bloco try/catch (o que não seria necessária quando se utiliza Boolean.TryParse), ele irá converter com êxito a maioria dos valores booleanos 'sensíveis', incluindo verdadeiro / falso e 0/1.

Edit: como fora apontado em um comentário, esta resposta é meio inútil para programadores C #, como CBool é um VB-ismo. Ele mapeia para Microsoft.VisualBasic.CompilerServices.Conversions::ToBoolean, o que não é adequado para consumo geral. O que torna a classe XmlConvert apontadas na resposta aceita uma ainda melhor alternativa.

Sanitize os dados antes de tentar analisá-lo:

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

Qualquer outra entrada de true , false , 0 ou 1 irá ainda lançar um "Bad Format" exceção (como deveria ser).

return value === 'true' || Number(value)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top