我正在使用delegates 在我的c#windows表单应用程序项目中。我正在尝试删除 列表框中的项目。我得到这个空指针异常,有人可以提出一种方法来避免这种情况吗?
代表
public delegate void OrderEventDelegate (Object sender, OrderEventArgs args);
OrderEventArgs类
public class OrderEventArgs
{
private String message;
public String Message
{
get { return message; }
set { message = value; }
}
private int tableNo;
public int TableNo
{
get { return tableNo; }
set { tableNo = value; }
}
}
第1课
public partial class Class1 : Form
{
private event OrderEventDelegate readyEvent;
public Class1(HomeForm parent, int tableNo)
{
InitializeComponent();
readyEvent -= new OrderEventDelegate(parent.readyOrder);
}
public void button_click()
{
OrderEventArgs readyOrderArg = new OrderEventArgs();
readyOrderArg.TableNo = 1;
readyOrderArg.Message = "123";
readyEvent(this, readyOrderArg);
}
}
此处readyEvent -= new OrderEventDelegate(parent.readyOrder);
readyOrder()是删除列表中位于“Homeform”中的项目的方法。
异常
答案 0 :(得分:0)
如果有可能某些东西是空的并且你可以对它做些什么/不想在它发生时严重失败,那么检查它:
if (readyEvent != null) {
readyEvent( ... );
}
但我想,这里的重点是你不希望这个东西是空的;所以你应该为这个事件订阅一个处理程序。我不确定您为什么要删除委托处理程序的new
实例,但要添加一个您将使用+=
的实例。
答案 1 :(得分:0)
可以使用空委托初始化C#事件。这样,无需空指针检查就可以安全地调用它。如答案所示:https://stackoverflow.com/a/340618/2404788。
public delegate void OrderEventDelegate (Object sender, OrderEventArgs args) = delegate {};