在委托中避免空指针异常

时间:2014-03-11 09:41:04

标签: c# .net delegates listbox windows-applications

我正在使用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”中的项目的方法。

异常 enter image description here

2 个答案:

答案 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 {};