2010-01-02 52 views
1

Nodo N;
foreach(listBox_nodos.Items中的字符串S)
{
N = graph.getNodoName(S);
string comp =(string)listBox_nodos.SelectedItem;
if(comp == S)
System.Console.WriteLine(N.NAME);
}C#InvalidOperationException

我得到InvalidOperationException和應用程序崩潰。
無法理解爲什麼。任何幫助?謝謝

編輯:'N.NAME'打印!然後進入崩潰。
編輯2:我試圖捕捉異常,應用程序崩潰無論如何

+0

您可能發現異常正在其他地方完全生成。你能發佈整個異常消息嗎? – 2010-01-02 15:47:24

+0

異常消息:在System.Windows.Forms.dll中發生類型'System.InvalidOperationException'的第一次機會異常 – Ricardo 2010-01-02 15:50:51

+0

我的意思不僅僅是 - 堆棧跟蹤等。 – 2010-01-02 16:02:12

回答

1

在哪一行你會得到異常?不知道listBox_nodos有什麼數據類型,我的第一個猜測w2ould是Items不含有大量的string S,而是ListBoxItem小號

foreach (var item in listBox_nodos.Items) 
{ 
    N = graph.getNodoName(item.Value); // or .SomethingElse 
+0

當我添加項目到列表框,他們是字符串。 我想我必須瞭解更多關於列表框的內容。 – Ricardo 2010-01-02 15:37:04

+0

問題解決了。我將listBox_nodos.Items更改爲listBox_nodos.SelectedItems。但仍然,我不能得到異常的原因 – Ricardo 2010-01-02 15:47:35

+2

當你修改循環內的Items集合時,foreach循環引發這個異常。相反,使用SelectedItems可以避免這種情況,只要您不更改所選項目即可。 – 2010-01-02 16:25:28

0

也許SelectedItem屬性不是一個字符串。嘗試使用ToString()而不是強制轉換,並查看是否解決了您的問題(或轉換爲實際類型並進行比較)。

+0

是否做到了。完全相同的異常 – Ricardo 2010-01-02 15:39:23

1
  • 如前面提到的,完整的例外情況是很高興看到(如果在VS調試器,你可以從異常助手對話框或調試$例外項目獲取它 - >窗口 - >局部變量)。最壞的情況下,你應該可以嘗試{..} catch(Exception ex){System.Console.WriteLine(ex); (異常的ToString包含堆棧跟蹤)

    • 如果您不確定涉及的類型,可以獲取Items/SelectedItem作爲IEnumerable/object,然後gettype()對其進行顯示。
  • 當試圖顯示的東西,也可能想嘗試MessageBox.Show以防萬一因爲某種原因使用控制檯的異常。

  • 與異常無關,但它看起來像是在列表框項目上查找所選項目 - 如果這是真的,爲什麼不直接使用選定的項目?

+0

感謝您的時間!確實是的。我現在不能把信息放在這裏,因爲我的應用程序已經升級了,而且代碼是完全不同的。我沒有直接使用該項目,因爲ListBox只是一個表示對象的ArrayList的字符串集合。我是學生,這個網站和評論非常幫助我,非常感謝時間。 – Ricardo 2010-01-03 03:02:39

0

我以前也有類似的問題,也與選定的項目有關。我對它進行了廣泛的調查,但無法找到解決辦法。我最終完成了重新制作表格的工作(儘管我認爲只是控制是必要的),而且似乎可以解決這個問題。

0
List<string> l = new List<string> {"a", "b", "c"}; 
foreach (string s in l) 
    l.Remove(s); 

這段代碼會在第一次迭代後引發異常。

+0

此代碼涉及一個異常,因爲在迭代過程中刪除了一個項目,這與該問題完全無關。 – glen3b 2014-03-27 01:42:18

相關問題