20

声明为 xs:boolean 的 XML 属性可接受为“true”、“false”、“0”或“1”。但是,在 .NET 中,Boolean.Parse() 将只接受“true”或“false”。如果它看到“0”或“1”,则会引发“错误格式”异常。

那么,鉴于此,将这样的值解析为布尔值的最佳方法是什么?

(不幸的是,我仅限于 .NET 2.0 解决方案,但如果 v3.5 提供了一些东西,我很想听听。)

4

4 回答 4

37

我认为XmlConvert具有在公共语言运行时类型和 XML 类型之间进行转换的所有方法。尤其是XmlConvert.ToBoolean精确处理布尔值(有效字符串是“1”或“true”代表真,“0”或“假”代表假)。

于 2008-11-05T15:19:03.767 回答
2

使用CBool而不是Boolean.Parse应该可以解决问题:尽管您必须将其嵌入try/catch块中(使用 时不需要Boolean.TryParse),但它会成功转换大多数“合理”的布尔值,包括真/假和 0/1。

编辑:正如评论中指出的那样,这个答案对 C# 程序员来说有点没用,就像CBoolVB-ism 一样。它映射到Microsoft.VisualBasic.CompilerServices.Conversions::ToBoolean,不适合一般消费。这使得在接受的答案中指出的 XMLConvert 类成为更好的选择。

于 2008-11-05T15:16:16.473 回答
0

在尝试解析数据之前对其进行清理:

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

除了truefalse01之外的任何其他条目仍将引发“错误格式”异常(应该如此)。

于 2008-11-05T15:27:04.157 回答
0
return value === 'true' || Number(value)
于 2013-04-09T11:32:59.770 回答