声明为 xs:boolean 的 XML 属性可接受为“true”、“false”、“0”或“1”。但是,在 .NET 中,Boolean.Parse() 将只接受“true”或“false”。如果它看到“0”或“1”,则会引发“错误格式”异常。
那么,鉴于此,将这样的值解析为布尔值的最佳方法是什么?
(不幸的是,我仅限于 .NET 2.0 解决方案,但如果 v3.5 提供了一些东西,我很想听听。)
声明为 xs:boolean 的 XML 属性可接受为“true”、“false”、“0”或“1”。但是,在 .NET 中,Boolean.Parse() 将只接受“true”或“false”。如果它看到“0”或“1”,则会引发“错误格式”异常。
那么,鉴于此,将这样的值解析为布尔值的最佳方法是什么?
(不幸的是,我仅限于 .NET 2.0 解决方案,但如果 v3.5 提供了一些东西,我很想听听。)
我认为XmlConvert具有在公共语言运行时类型和 XML 类型之间进行转换的所有方法。尤其是XmlConvert.ToBoolean
精确处理布尔值(有效字符串是“1”或“true”代表真,“0”或“假”代表假)。
使用CBool
而不是Boolean.Parse
应该可以解决问题:尽管您必须将其嵌入try/catch
块中(使用 时不需要Boolean.TryParse
),但它会成功转换大多数“合理”的布尔值,包括真/假和 0/1。
编辑:正如评论中指出的那样,这个答案对 C# 程序员来说有点没用,就像CBool
VB-ism 一样。它映射到Microsoft.VisualBasic.CompilerServices.Conversions::ToBoolean
,不适合一般消费。这使得在接受的答案中指出的 XMLConvert 类成为更好的选择。
在尝试解析数据之前对其进行清理:
string InnerText = yourXmlNode.InnerText;
if (InnerText.Equals("0"))
InnerText = "false";
else if (InnerText.Equals("1"))
InnerText = "true";
除了true、false、0或1之外的任何其他条目仍将引发“错误格式”异常(应该如此)。
return value === 'true' || Number(value)