我在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值分配处停止。
假设这就是原因,感谢大家的帮助。我看到异常没有被泛型捕获
例外
,而这是不可能的,对我来说,这排除了所有其他的推理,因此出现了真正中断的混乱和遗漏。