Шаблонная замена кода - является там чем-нибудь плохо об этом коде?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

18
задан Community 23 May 2017 в 11:53
поделиться

3 ответа

Это - хороший материал. Сделайте их дополнительными методами, хотя очистить Ваш код немного больше. Например:

//Replaces OnMyEventRaised boiler-plate code
//Usage: SafeInvoker.RaiseEvent(this, MyEventRaised)
public static void Raise(this EventHandler eventToRaise, object sender)
{
            EventHandler eventHandler = eventToRaise;

            if (eventHandler != null)
                eventHandler(sender, EventArgs.Empty);
}

Теперь на Ваших событиях можно звонить: myEvent. Повысьте (это);

15
ответ дан 30 November 2019 в 09:07
поделиться

Подобные шаблоны работали на меня без проблем. Я не уверен, почему Вы переносите Действие в MethodInvoker все же.

0
ответ дан 30 November 2019 в 09:07
поделиться

Из-за того, что Бенджол не знает, почему он помещает действие в методинвекере, а брокиклиман должен использовать его как Функция расширения, вот курс очистки:

static class SafeInvoker
{
    //Utility to avoid boiler-plate InvokeRequired code
    //Usage: myCtrl.SafeInvoke(() => myCtrl.Enabled = false);
    public static void SafeInvoke(this Control ctrl, Action cmd)
    {
        if (ctrl.InvokeRequired)
            ctrl.BeginInvoke(cmd);
        else
            cmd();
    }

    //Replaces OnMyEventRaised boiler-plate code
    //Usage: this.RaiseEvent(myEventRaised);
    public static void RaiseEvent(this object sender, EventHandler evnt)
    {
        if (evnt != null)
            evnt(sender, EventArgs.Empty);
    }
}

Просто последнее примечание: MethodInvoker и Действие - оба делегаты, имеющие точную той же структуру. Из-за этого случая оба заменяются друг другом. Корень этого столкновения происходит от наследия. В начале (.NET 2.0) был всего MethodInvoker и действие (T) . Но из-за того, что все, кто использовал действий (T) , увлекся , чтобы иметь действие , и обнаружил, что он очень неестественно взять методинвек . Таким образом, в .NET 3.5 действия , , действий (T1, T2, T3, T4) и все функции и все делегатов, где это тоже добавлено, но MethodInvoker не может быть Удалено больше, не делая никаких изменений.

Дополнительно:

Если вы можете использовать .NET 3.5, вышеуказанный код в порядке, но если вы закреплены на .NET 2.0, вы можете использовать его как обычную функцию, как раньше, и заменить действие ] по методине .

3
ответ дан 30 November 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: