C# NullReferenceException, пока EventHandler - PullRequest
1 голос
/ 03 мая 2020

Я получаю исключение NullRefernceException, даже если я подписался на событие в методе запуска.

Где я создаю свое событие:

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 
    }

1 Ответ

1 голос
/ 03 мая 2020

События null, когда никто не подписался. К счастью, современный C# делает это простым:

ClickEvent?.Invoke(this, args);

В более старых языковых версиях вам нужно быть более многословным:

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

Они означают одно и то же.

В качестве небольшой оптимизации вы можете sh отложить создание объекта CustomArgs до тех пор, пока не узнаете, что кого-то это волнует, хотя:

ClickEvent?.Invoke(this, new CustomArgs {
    Name = gebäude.ToString(),
    Level = Level,
    MenuePosition = Menue
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...