2013-02-04 101 views
0

我有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);各個環節的內容,可以從報廢各個環節的內容除了最後one.my代碼就是這樣

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 "); 
    } 
} 

僅爲最後一個鏈接顯示「No english word is found」

我在做什麼錯了?

+4

追趕的NullReferenceException是很少做正確的事。 –

+0

如果您不忽略實際的異常情況,您可能會弄清楚發生了什麼事情。 –

+0

同意!相反,檢查null! if(object!= null)'或'if(!String.IsNullOrEmpty(yourString))'爲字符串。 – Amicable

回答

0

首先,抓住NullReferenceException這裏不是一個好主意。最好檢查null你希望的空位。

其次,由於HtmlNode.SelectNodes方法返回null(如您所期望的那樣,不是空的節點集合),如果找不到節點,很可能會得到此異常。參見HTML Agility Pack Null Reference,C#/ Html Agility pack error 「Value cannot be null. Parameter name: Source.」,以及關於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 "); 
} 
0
  1. 更改您的catch語句以捕獲所有異常,而不僅僅是NullReferenceException。
  2. 調試器是你的朋友,使用它。我猜你會在將某個新單詞添加到列表之前在某處出現異常。在你的foreach循環中設置一個斷點。