尝试/捕获阻止不捕获异常

时间:2009-10-27 12:21:00

标签: c# asp.net session try-catch

我在try / catch块中有一个语句,但异常没有被捕获。谁能解释一下?

  

异常详细信息:   System.NullReferenceException:Object   引用未设置为的实例   对象

来源错误:

Line 139:                try
Line 140:                {
Line 141:                    return (int)Session["SelectedLeadID"];
Line 142:                }
Line 143:                catch (Exception ex)

更新 这是一个ASP.NET应用程序。在catch块中,抛出一个新异常。您看到的代码是ASP.NET错误页面上显示的内容。

5 个答案:

答案 0 :(得分:6)

该拦截块应该捕获异常,但要确保没有重新投掷。

另一个小评论:我被VS欺骗了很多次,导致它在调试模式下运行时出现异常。尝试简单地按“继续”或“F5”,看看你的应用程序是否仍无效:)

答案 1 :(得分:5)

我怀疑您需要添加更多详细信息 - 这些信息无法从您的代码中重现。特别是(如前所述)我们需要查看catch内部,并验证异常实际上是从{em>内部 try而不是其他地方抛出的。

其他可能性:

  • 你在异常处理程序中有狡猾的代码,它本身就是抛出异常
  • 你有一个狡猾的Dispose()被调用(using等)
  • 你在.NET 1.1中,抛出的东西(代码未显示)不是Exception,而是其他一些对象

答案 2 :(得分:2)

如果只有调试器中断异常并且您使用的是VS2005或更高版本,则可能需要在 Debug-> Exceptions ... 下查看是否有任何公共语言 - 运行时 - 例外已激活。如果是这样,调试器将始终首先捕获异常,但您可以继续。

要恢复正常执行,只需从列表中取消选中适当的例外情况。

答案 3 :(得分:-1)

代码看起来非常丑陋的IMO。因为catch()块中有一些东西意味着你将有另一个return ...语句,AFAIK你应该在每个函数的末尾都有一个return语句,以便使下面的代码更容易。

即。也许你的代码看起来像

public int Function()
{
  int leadID = 0;
  try
  {
    int leadID = (int)Session["SelectedLeadID"];
  }
  catch (Exception ex)
  {
    ...
  }
  return leadID
}

我认为单个退出点可以让代码更容易理解?无论如何,要获得任何有用的帮助,你必须发布更多的功能。

答案 4 :(得分:-4)

使用“System.Exception”而不是Exception。

catch (System.Exception ex)

我有一个“使用Java.Lang;”

引起的完全相同的问题