首页 > 解决方案 > C# NullReferenceException 而 EventHandler

问题描述

即使我在 Start Methode 中订阅了事件,我也会收到 NullReferenceException。

我在哪里创建我的活动:

public EventHandler<CustomArgs> ClickEvent;

    private void OnMouseDown()
    {
        Debug.Log("Clicked");
        CustomArgs args = new CustomArgs();
        args.Name = gebäude.ToString();
        args.Level = Level;
        args.MenuePosition = Menue;

        ClickEvent?.Invoke(this, args);
    }

我在哪里订阅我的活动:

private void Start()
    {
        miene.ClickEvent += ClickEvent;
        Debug.Log("Event Addedet");
    }

    private void ClickEvent(object sender, CustomArgs e)
    {
        //some useless stuff 
    }

标签: c#eventsevent-handlingeventargs

解决方案


事件是null没有人订阅的时候。幸运的是,现代 C# 使这变得简单:

ClickEvent?.Invoke(this, args);

对于较旧的语言版本,您需要更加详细:

var handler = ClickEvent;
if (handler != null) handler(this, args);

它们的意思完全相同。

作为一个小的优化,您可能希望推迟创建CustomArgs对象,直到您知道有人关心,但是:

ClickEvent?.Invoke(this, new CustomArgs {
    Name = gebäude.ToString(),
    Level = Level,
    MenuePosition = Menue
});

推荐阅读