如何检查数组是否存在?

时间:2011-09-16 00:04:36

标签: c# arrays error-handling multidimensional-array

我正在使用以下代码将HTML解析为数组。

void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
  {
 var html = e.Result;
 var doc = new HtmlDocument();
 doc.LoadHtml(html); 

 var list = doc.DocumentNode.Descendants("div").ToList();
 var node = doc.DocumentNode.Descendants("table")   
           .FirstOrDefault(x => x.Id == "departures")   
           .Element("tbody")          .Elements("tr") 
           .Select(tr => tr.Elements("td")
           .Select(td => td.InnerText).ToArray()).ToArray(); 

然后我使用以下代码输出到Texblock。

//first line 
textBlock1.Text = node[0][0];
textBlock2.Text = node[0][1];
textBlock3.Text = node[0][2];

  //Second line
 textBlock4.Text = node[1][0];
 textBlock5.Text = node[1][1];
 textBlock6.Text = node[1][2];

  //Third line 
textBlock7.Text = node[2][0];
textBlock8.Text = node[2][1];
textBlock9.Text = node[2][2];

我的问题是:HTMl在一天中发生了变化,因此有时候没有和[2],有时会有[12]。

我想知道的是我如何通过条件语句检查数组是否存在,只有输出值才会输出。

我尝试过如下所示的条件语句,但是当没有任何节点[2]或节点[1]结果时,它仍会显示未处理的异常

if (node[2][0].length > 0)
   {
       textBlock1.Text = node[2][0];
    }

任何帮助都会得到帮助。如果您需要澄清,请告诉我。

1 个答案:

答案 0 :(得分:1)

要避免无效索引,必须确保 all 维度,例如

if (node.length > 2 && node[2].length > 0) {
    // Okay to use node[2][0]
    // Since && is short-circuiting it will never make second
    // check if first fails.
}

对我来说,一个更基本的问题似乎是文本框不是可变的但是是固定的(box1,box2等)。考虑使用不同的控件,可能是各种列表控件。然后可以统一添加n项(并且只需使用循环结构而无需第一次索引检查)。文本框也可以动态创建,但这不是我的首选。

快乐的编码。