簡體   English   中英

winform中列表的空值異常

[英]null value exception for a list in a winform

我有 2 個列表:

public List<string> my_link = new List<string>();
public List<string> english_word = new List<string>();

我正在從頁面上抓取一些鏈接並將它們保存到“my_link”;為此我使用這些代碼,例如:

HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load("http://search.freefind.com/find.html?id=59478474&pid=r&ics=1&query=" + x);
HtmlNodeCollection nodes=doc.DocumentNode.SelectNodes("//font[@class='search-results']//a");

try
{
    foreach (HtmlNode n in nodes)
    {
        link = n.InnerHtml;
        link = link.Trim();
        my_link.Add(link);
    }
}
catch (NullReferenceException )
{
    MessageBox.Show("NO link found ");            
}
       

然后我正在抓取我抓取的鏈接上的一些內容,並將每個鏈接的內容存儲在english_word.Add(q); 它可以從除最后一個鏈接之外的所有鏈接中抓取內容。我的代碼是這樣的

foreach (string ss in my_link)
{
    HtmlWeb web2 = new HtmlWeb();
    HtmlAgilityPack.HtmlDocument doc2 = web2.Load(ss);
    HtmlNodeCollection nodes2 = doc2.DocumentNode.SelectNodes("//table[@id='table1']//tr[position()>1]//td[position()=2]");
    try
    {
        foreach (HtmlNode nn in nodes2)
        {
            q = nn.InnerText;
            q = System.Net.WebUtility.HtmlDecode(q);
            q = q.Trim();
            english_word.Add(q);
        }
    }
    catch (NullReferenceException ex)
    {
        MessageBox.Show("No english word is found ");
    }
}

對於最后一個鏈接,它僅顯示“未找到英文單詞”

我究竟做錯了什么?

  1. 更改 catch 語句以捕獲所有異常,而不僅僅是 NullReferenceException。
  2. 調試器是您的朋友,請使用它。 我猜您在向列表中添加新單詞之前會在某處遇到異常。 在 foreach 循環中設置斷點。

首先,在這里捕獲NullReferenceException不是一個好主意。 最好在您期望空值的地方檢查null值。

其次,很可能你會因為HtmlNode.SelectNodes方法返回null (不是你所期望的空節點集合)而得到這個異常,如果沒有找到節點。 請參閱 HTML Agility Pack Null ReferenceC#/Html Agility Pack 錯誤“值不能為空。 參數名稱:來源。” ,以及關於CodePlex的討論。

因此,您可以使用以下內容代替try .. catch塊:

if (nodes2 != null)
{
    foreach (HtmlNode nn in nodes2)
    {
        q = nn.InnerText;
        q = System.Net.WebUtility.HtmlDecode(q);
        q = q.Trim();
        english_word.Add(q);
    }
}
else
{
    MessageBox.Show("No english word is found ");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM