【问题标题】:A first chance exception of type 'System.IndexOutOfRangeException' in exe in output window [duplicate]输出窗口中 exe 中“System.IndexOutOfRangeException”类型的第一次机会异常[重复]
【发布时间】:2015-05-31 09:28:21
【问题描述】:

我正在运行一个 Windows 窗体程序,它在另一个线程上完成所有工作。一段时间后,UI 冻结并停止响应。后台线程仍然工作正常(我可以从完成的工作中看到)。

我遇到了这个异常:

exe 中“System.IndexOutOfRangeException”类型的第一次机会异常

当我跟踪异常行并再次运行它时,我得到了这个:

线程 <No Name> (0x19b4) 已退出,代码为 0 (0x0)。

这行代码运行良好,但它给出了System.IndexOutofRangeException

MatchCollection tempcollection = Regex.Matches(document,
        "(?<data>More information from(.|\\r|\\n)*?</div>)");
if (tempcollection.Count == 0)
{
    return Result;
}
string ThisDiv = tempcollection[0].Groups["data"].Value;
// The above line shows exception in Output Window,
// otherwise it works fine and moves to next line.

更新:我已经看到输出提供了有关每个异常的信息,无论它是否被捕获,我认为这是冻结 UI 的原因,但事实并非如此。

  1. 请帮助我摆脱这个异常。
  2. 是否是未经检查的异常;我在研究中了解到 .Net 没有未经检查的异常。请澄清这一点,以便我理解。

【问题讨论】:

  • 为什么不把 tempcollection[0].Groups["data"].Value 放在 if 语句 "if (tempcollection.Count != 0)" 中?如果计数为 0,"string ThisDiv = tempcollection[0].Groups["data"].Value;"将抛出“超出范围”异常。
  • @SormitaChakraborty 引发异常的是对 Count 本身的调用。我也遇到了同样的问题。

标签: c# winforms visual-studio-2010 first-chance-exception


【解决方案1】:

正则表达式可能没有返回组值并且 tempcollection[0].Groups["data"] 可能未设置,因此 group 上的索引器将失败,并且您可能会获得索引超出范围异常尝试在尝试从中获取值之前对其添加空检查。

尝试验证输入数据的正则表达式,以验证上述在任何正则表达式工具上是否正确。

【讨论】:

  • 让我检查一下,Neeraj 是不是未经检查的异常,为什么它没有被捕获
  • Java 有一个概念,即不仅通过 cmets 定义方法可能通过什么,而且是代码语义的一部分。 .Net 反过来没有这种语义,而是所有此类信息都是此类方法文档的一部分。因此,对于 'int.Parse' (msdn.microsoft.com/en-us/library/b3h1hf19(v=vs.110).aspx) 方法,代码文档定义它可以有这些异常。您必须根据本文档显式编写代码来处理任何预期的异常。有点像下面: try { // 正则表达式逻辑 } catch (IndexOutOfRangeException iore) { // 其他逻辑 }
  • @Neeraj 是对 Count 本身的调用引发了异常。我也有同样的问题。
  • 您的索引超出了计数范围?如果您不介意 sn-p 会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多