【问题标题】:C# InvalidOperationExceptionC# 无效操作异常
【发布时间】:2010-01-02 15:30:38
【问题描述】:
Nodo N;  

foreach (string S in listBox_nodos.Items)  
{  
    N = graph.getNodoName(S);  
    string comp = (string) listBox_nodos.SelectedItem;  
    if (comp == S)  
        System.Console.WriteLine(N.NAME);  
}  

我收到InvalidOperationException 并且应用程序崩溃了。
不明白为什么。有什么帮助吗?谢谢。

编辑:“N.NAME”打印出来了!然后就崩溃了。
EDIT2:我试图捕捉异常,应用程序还是崩溃了。

【问题讨论】:

  • 您可能会发现异常完全在其他地方生成。你能发布整个异常消息吗?
  • 异常消息:System.Windows.Forms.dll 中发生了“System.InvalidOperationException”类型的第一次机会异常
  • 我的意思不止于此 - 堆栈跟踪等
  • 不知道如何获取该信息。感谢您的帮助,异常已消失。我将 .Item 更改为 .SelectedItems

标签: c# invalidoperationexception


【解决方案1】:

您在哪一行得到异常?在不知道listBox_nodos 有什么数据类型的情况下,我的第一个猜测是Items 不包含很多strings,而是ListBoxItems

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

【讨论】:

  • 当我将项目添加到列表框时,它们是字符串。我想我必须了解更多关于列表框的信息。
  • 问题已解决。我将 listBox_nodos.Items 更改为 listBox_nodos.SelectedItems。但是,我仍然无法得到异常的原因
  • 当您在循环内修改 Items 集合时,foreach 循环会引发此异常。只要您不更改所选项目,使用 SelectedItems 确实可以避免这种情况。
  • @nobugz 谢谢,现在我知道了异常的原因。
  • 您也可以尝试使用 Linq 在您的 foreach 中通过 .ToList().ToArray() 创建集合的副本。
【解决方案2】:
  • 如前所述,很高兴看到完整的异常(如果在 VS 调试器中,您可以从异常帮助器对话框或 Debug -> Windows -> Locals 中的 $exception 条目中获取它)。最坏的情况你应该可以尝试 { .. } catch (Exception ex) { System.Console.WriteLine(ex); (异常的 ToString 包括堆栈跟踪)

    • 如果您不确定所涉及的类型,可以将 Items/SelectedItem 作为 IEnumerable/object 获取,然后对其进行 gettype() 并显示。
  • 在尝试显示内容时,可能还想尝试 MessageBox.Show,以防万一由于某种原因使用控制台导致异常。

  • 与异常无关,但看起来您正在对列表框项目进行交互以查找所选项目 - 如果这是真的,为什么不直接使用所选项目?

【讨论】:

  • 感谢您的宝贵时间!确实是的。我现在不能把信息放在这里,因为我的应用程序已经先进了,而且代码完全不同。我没有直接使用该项目,因为 ListBox 只是一个字符串集合,它表示对象的 ArrayList。我是学生,这个网站和 cmets 对我很有帮助,真的非常感谢。
【解决方案3】:

我之前也遇到过类似的问题,也与所选项目有关。我对其进行了广泛调查,但无法找到解决方法。我最终重新制作了表单(尽管我认为只有控件是必要的),这似乎解决了它。

【讨论】:

    猜你喜欢
    • 2015-05-06
    • 2010-10-02
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2010-11-12
    相关资源
    最近更新 更多