c#“if”语句不起作用。检查所有变量为空

时间:2017-09-06 14:33:13

标签: c# .net

我有这个XML文件

<?xml version="1.0" encoding="utf-8"?>
<message>
 <success/>
  <bookings>
   <booking>
     <rooms>
      <room roomCode ="101" uniqueId="abc">
      <stays>
        <stay usedfrom="9:30" usedto="10:30" quantity="1" Price="62.5" rateCode="1"/>
      </stays>
      <extras>
        <extra from="9:30" to="10:30" unitPrice="5.5" extraCode="coffee" quantity="1" inclusive="0"/>
      </extras>
      <guests>
        <guest firstName="John" lastName="Doe" title="MR" ageRange="0"/>
      </guests>
    </room>
    <room roomCode ="Brd" uniqueId="xyz">
      <stays>
        <stay usedfrom="13:30" usedto="15:30" quantity="1" unitPrice="60.0000" rateCode="RACK"/>
      </stays>
      <guests>
        <guest firstName="Jean" lastName="Doe" title="MRS" ageRange="0"/>
      </guests>
    </room>
  </rooms>
</booking>

并且我正在尝试运行检查以确保其格式正确(即某些元素存在)。 我一直在使用的代码是

XmlNodeList Successful = doc.GetElementsByTagName("success");
XmlNodeList Bookings = doc.GetElementsByTagName("bookings");
XmlNodeList Booking = doc.GetElementsByTagName("booking");
XmlNodeList Rooms = doc.GetElementsByTagName("rooms");

if ((Successful != null) && (Bookings != null) && (Booking != null) && (Rooms != null))
{
    //do something
}
else
{
    //do something else
}

这总是有用的想法。

如果我将其中一个值更改为

XmlNodeList Rooms = doc.GetElementsByTagName("NoSuchElement");

(XML中不存在)它仍然“有效”。

有人可以指出我做错了吗(我尝试从“if”语句中删除外部括号,但这并没有改变结果)。

由于

2 个答案:

答案 0 :(得分:4)

选择docs

  

包含所有匹配节点列表的XmlNodeList。如果没有节点   匹配名称,返回的集合将为空。

该方法不能返回null,而是返回一个空列表。所以请检查一下:

if(theNodeList.Any()) { ... }
else { /* error */ }

答案 1 :(得分:3)

这是因为oc.GetElementsByTagName("NoSuchElement");永远不会为空。

根据documentation,如果不存在任何元素,则返回en 空集合,它不为空。

您必须检查结果的Count

类似的东西:

if (Successful.Count() != 0 && ...)

if (!Successful.Any() && ... )