4

「SelectNodes」がNULLを返す場合、以下の foreach ループでNullReferenceExceptionエラーをキャッチするにはどうすればよいですか?

stackoverflow で検索したところ、このエラーをキャッチするために使用できる null 合体条件 (?? 条件) についての言及が見つかりましたが、HTMLNode の構文がどうなるか、またはそれが可能かどうかさえわかりません。

foreach (HtmlNode link in imagegallery.DocumentNode.SelectNodes("//a[@href]") )
            {
                //Do Something
            }

このループの NULL EXCEPTION をどのように処理しますか、またはこれを行うためのより良い方法はありますか?

例外をスローする完全なコードは次のとおりです-

    private void TEST_button1_Click(object sender, EventArgs e)
    {
        //Declarations           
        HtmlWeb htmlWeb = new HtmlWeb();
        HtmlAgilityPack.HtmlDocument imagegallery;

            imagegallery = htmlWeb.Load(@"http://adamscreation.blogspot.com/search?updated-max=2007-06-27T10:03:00-07:00&max-results=20&start=18&by-date=false");

            foreach (HtmlNode link in imagegallery.DocumentNode.SelectNodes("//a[@imageanchor=1 or contains(@href,'1600')]/@href"))
            {
               //do something
            }
    }       
4

3 に答える 3

8
if(imagegallery != null && imagegallery.DocumentNode != null){
  foreach (HtmlNode link in 
    imagegallery.DocumentNode.SelectNodes("//a[@href]") 
      ?? Enumerable.Empty<HtmlNode>()) 
  {
    //do something
  }
}
于 2012-07-03T07:19:18.253 に答える
0

コレクションを使用する前に、コレクションが NULL かどうかをテストする 2 つの手順で実行できます。

if (imagegallery != null && imagegallery.DocumentNode != null)
{
    HtmlNodeCollection linkColl = imagegallery.DocumentNode.SelectNodes("//a[@href]");

    if (linkColl != NULL)
    {
        foreach (HtmlNode link in linkColl)
        {
           //Do Something
        }
    }
}
于 2012-07-03T07:21:18.860 に答える