代码之家  ›  专栏  ›  技术社区  ›  Keven M

Try-Catch未捕获C中方法中的异常#

  •  0
  • Keven M  · 技术社区  · 3 年前

    我在WPF桌面应用程序中有一个搜索框和按钮组合。单击搜索按钮时,它在中使用谓词 Library.Find() 方法来搜索输入的精确搜索词。这一切都在try-catch块中,这样,如果搜索词不匹配,就不会导致应用程序崩溃。

    问题是,异常没有被捕获,相反,尽管有try-catch块,它仍然会崩溃。通过调试,我知道异常的类型是 NullReferenceException 。我也试过抓 ArgumentNullException ,因为这是为列出的类型 图书馆发现 方法,我甚至尝试只使用一个泛型 Exception 类型,但什么都抓不到。有人能帮忙解释一下吗?我确信我忽略了一些简单的问题,但我看到的答案都没有类似的情况。

    注意:在的内容周围没有try-catch块 ShowRecord() 方法,因为此方法也用于记录导航按钮(即下一个记录、上一个记录等),并且 ArgumentNull NullReference 在那种情况下说不通。正如我一直被教导的那样,我只对可能引发相关错误的代码进行了尝试捕获。

    searchButton代码:

    private void searchButton_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            ShowRecord(gameLibrary.Find(x => x.GameName == searchBox.Text));
        }
        catch (ArgumentNullException ex)
        {
            string term = searchBox.Text;
            searchBox.Text = "'" + term + "' was not found in the library.  Please try another search term.";
        }
    }
    

    ShowRecord()代码:

    public void ShowRecord(Game game)
    {
        titleBlock.Text = game.GameName;
        systemBlock.Text = game.GameSystem;
        formatBlock.Text = game.GameFormat;
        completedBlock.Text = game.IsComplete.ToYesNo();
        totalledBlock.Text = game.IsTotaled.ToYesNo();
        gamepassBlock.Text = game.GamePassStatus;
        installedBlock.Text = game.IsInstalled.ToYesNo();
    
        recordNumber.Content = (gameLibrary.FindIndex(x => x == game) + 1).ToString();
        recordCount.Content = gameLibrary.Count;
    }
    

    编辑 我正在按照其中一条评论中的要求粘贴堆栈跟踪,在这样做的过程中可能已经解决了问题 显示记录() 方法也用于记录导航;因此,其中有一个段,其中TextBoxes被分配了所定位记录的值(即。 TextBox.Text = gameLibrary.GameName ). 正是在这一点上,异常正在发生,所以即使它发生在 显示记录() 调用按钮单击事件,该问题实际上与 List.Find(Predicate) 例外情况应该抓住的部分。这有道理吗?此外,@Tam Bui提到添加了第二个catch block 例外 被捕获,并在其中添加一个断点:我这样做了,但它仍然没有在断点处停止,而是在TextBox值分配处停止。

    假设这就是原因,感谢大家的帮助。我看到异常没有被泛型捕获 例外 ,而这是不可能的,对我来说,这排除了所有其他的推理,因此出现了真正中断的混乱和遗漏。

    0 回复  |  直到 3 年前