gpt4 book ai didi

c# - 为什么调用 null 事件处理程序不会引发异常?

转载 作者:太空狗 更新时间:2023-10-30 00:32:51 25 4
gpt4 key购买 nike

看完this question ,似乎以下代码应该失败:

private void Form1_Load(object sender, EventArgs e)
{
EventHandler myHandler = null;
myHandler(this, null);
}

但是当我运行它时,它工作得很好(什么也不做)。该代码的行为与以下代码有何不同?

private void Form1_Load(object sender, EventArgs e)
{
EventHandler myHandler = null;
EventHandler myCopy = myHandler;
if (myCopy != null)
{
myHandler(this, null);
}
}

编辑:根据 Lasse V. Karlsen 的回答,以这种方式捕获异常是可行的:

private void Form1_Load(object sender, EventArgs e)
{
try
{
EventHandler myHandler = null;
myHandler(this, null);
}
catch (Exception ex)
{
this.Text = "Exception!";
}
}

最佳答案

这里的问题是 Load 事件吞噬了你的异常。

这里还有关于此的其他问题以及网上关于它的其他帖子:

简而言之,在某些情况下(最常被引用的原因是在 64 位 Windows 上运行的 32 位 .NET 程序)WinForms 窗体的 Load 事件中的任何异常都将被吞没。

您可以将 Form Load 事件包装在 try/catch block 中以捕获它,并确定如何对其使用react。

简而言之 2:代码确实如您所料导致空引用异常,只是您没有看到而已

关于c# - 为什么调用 null 事件处理程序不会引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15233835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com