繁体   English   中英

为什么我的捕获块没有捕获?

[英]Why isn't my catch block catching?

我有一个非常便宜的try / catch,它没有捕获NullReferenceException。 我正在尝试使用.Tag属性从表单返回日期值。 该标签通常为null,这很好。 我的以下代码对我来说似乎是最简单的,但不会被抓住。 任何帮助将是巨大的,在此先感谢...

public void ScheduleDataRun()
        {
            FrmSetTimer frmSetTimer = new FrmSetTimer(DateTimeOfNextAvailableDataRun);

            try
            {
                frmSetTimer.ShowDialog();
                DateTimeOfNextScheduledDataRun = (DateTime)frmSetTimer.Tag;
                SetDataRunTimer(DateTimeOfNextScheduledDataRun);
                Status = DRMStatus.Scheduled;
            }
            catch
            {
                Status = DRMStatus.Inactive;
                StatusChanged();
            }
        }

编辑:根据下面的Diggingforfire建议解决的问题:“在Debug-> Exceptions菜单中,您可以选择中断抛出的异常和用户未处理的异常。”

这实际上不是在回答问题,而是: if简单的if测试就足够了, if引发异常并捕获它被认为是不好的做法。 编辑:此外,由于异常显然是由于尝试将nullDateTime (这是一个值类型,我应该已经看到了-多亏了比我更清醒的注释者),所以您需要检查frmSetTimer.Tag投放之前 请尝试以下操作:

frmSetTimer.ShowDialog();
if (frmSetTimer.Tag == null) {
   Status = DRMStatus.Inactive;
   StatusChanged();
}
else {
   SetDataRunTimer((DateTime)frmSetTimer.Tag);
   Status = DRMStatus.Scheduled;
}

这假定即使参数为null, SetDataRunTimer()也不具有要触发的任何副作用。 如果是这样,则无论参数是否为null,都必须调用它,您应该修改该方法以优雅地处理null(并可能返回一个bool ,指示事情是否顺利)或抛出ArgumentNullException 另外,它需要一个DateTime? 为了使传递null成为可能。 NullReferenceException绝不应该被没有bug的代码抛出,也不应该被明确捕获-这样,任何NullReferenceException总是表示编程错误。

您确定在catch块中没有引起空引用异常吗?

尝试这个:

   try
    {
        frmSetTimer.ShowDialog();
        DateTimeOfNextScheduledDataRun = (DateTime)frmSetTimer.Tag;
        SetDataRunTimer(DateTimeOfNextScheduledDataRun);
        Status = DRMStatus.Scheduled;
    }
    catch (NullReferenceException)
    {
        Status = DRMStatus.Inactive;
        StatusChanged();
    }

编辑:如果这不起作用,请尝试使用调试器查看它是否甚至首先进入了您的“ catch”块。

确保SetDataRunTimer中没有任何捕获块可以“吞噬”异常。 是一些有用的例外准则。

我很好奇为什么您认为它没有抛出。 你在期待什么? 您是否在捕获中设置了断点? 在Debug-> Exceptions菜单中,您可以选择中断引发的异常和用户未处理的异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM