提问人:Keven M 提问时间:10/6/2021 最后编辑:Keven M 更新时间:10/6/2021 访问量:1098
Try-Catch 未捕获 C 方法中的异常#
Try-Catch not catching exception in method in C#
问:
我在 WPF 桌面应用程序中有一个搜索框和按钮组合。单击搜索按钮后,它使用方法中的谓词来搜索输入的精确搜索词。这一切都在 try-catch 块中,因此如果搜索词不匹配,它不会使应用程序崩溃。Library.Find()
问题在于,异常没有被捕获,而是尽管有 try-catch 块,它仍然会崩溃。通过调试,我知道异常的类型是 .我也尝试过捕捉,因为这是该方法列出的类型,我什至尝试只使用泛型类型,但从未捕获过任何类型。有人可以帮忙解释一下吗?我敢肯定这是我忽略的简单事情,但我看到的答案都没有类似的情况。NullReferenceException
ArgumentNullException
Library.Find()
Exception
注意:我在方法的内容周围没有 try-catch 块,因为此方法也用于记录导航按钮(即下一条记录、上一条记录等),在这种情况下 or 没有意义。我只有围绕代码的 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;
}
编辑我正在按照其中一条评论中的要求粘贴堆栈跟踪,并且可能已经找出了这样做的问题。如最初的问题所述,该方法也用于记录导航;因此,其中有一个段,其中为 TextBox 分配了所定位记录的值(即 )。此时异常正在发生,因此即使它发生在按钮单击事件中的调用中,问题实际上与异常应该捕获的部分无关。这有意义吗?除此之外,@Tam Bui 提到添加第二个只捕获的捕获块,并在其中添加一个断点: 我这样做了,它仍然没有停在断点上,它停在了 TextBox 值赋值处。ShowRecord()
TextBox.Text = gameLibrary.GameName
ShowRecord()
List.Find(Predicate)
Exception
假设这是原因,感谢大家的帮助。我看到异常没有被泛型捕获,并且不可能为我屏蔽了所有其他推理,因此混淆和遗漏了实际中断发生的地方。Exception
答: 暂无答案
评论
NullReferenceException
Exception
catch (ArgumentNullException ex)
catch (Exception ex)
ex.GetType()