我编写了这段代码来检查XmlNode是否有值,但是当我运行它时总是在!= null上崩溃。 这很奇怪,因为这个解决方案众所周知。
private static void TraverseNodes(XmlNodeList nodes)
{
foreach (XmlNode node in nodes)
{
if (!node.HasChildNodes)
{
Console.WriteLine(node.Name + " " + node.Attributes["id"].Value);
}
if (node.Attributes["SplitCombinationOperator"].Value != null)
{
Console.WriteLine(node.Name + " " + node.Attributes["SplitCombinationOperator"].Value);
}
else
{
Console.WriteLine(node.Name);
}
TraverseNodes(node.ChildNodes);
}
}
错误如下: 对象引用未设置为对象的实例。
答案 0 :(得分:1)
你应该检查这样的空值:
node.Attributes["SplitCombinationOperator"] != null &&
node.Attributes["SplitCombinationOperator"].Value != null
否则,当NullReferenceException
在尝试访问其node.Attributes["SplitCombinationOperator"]
属性时为空时,您将获得Value
。
答案 1 :(得分:1)
您只需要检查属性索引器本身是否返回null:
if (node.Attributes["SplitCombinationOperator"] != null)
目前,这将返回null,并且您将其取消引用Value
属性 - 因此异常。请注意,您还假设有一个id
属性,这可能不是一个好主意。
(你不需要检查Value
本身是否为空 - 如果属性存在,则该值为非空。即使它是空的,你也会得到一个空字符串而不是空引用。)