Зачем использовать EventArgs.Empty вместо null?

Закажите свои результаты с помощью series_id, так что все продукты с тем же значением будут вместе.

$stmt = $pdo->prepare("SELECT series_id, product_name
                       FROM yourTable
                       ORDER BY series_id");
$stmt->execute();

Затем, показывая результаты, покажите заголовок Серии и запустите новый <ul> всякий раз, когда он изменяется:

$last_series = null;
echo "<ul>\n";
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    if ($row['series_id'] != $last_series) {
        if ($last_series) {
            echo "</ul></li>\n";
        }
        echo "<li>" . $row['series_id'] . " Series Product\n";
        echo "<ul>\n";
        $last_series = $row['series_id'];
    }
    echo "<li>" . $row['product_name'] . "</li>\n";
}
if ($last_series) {
    echo "</li>\n";
}
echo "</ul>\n";
65
задан Stephen Kennedy 3 December 2018 в 11:42
поделиться

5 ответов

Я полагаю, что обоснование позади NOT NULL состоит в том, что, когда передано в качестве параметра, он, как ожидают, для метода не должен потенциально обрабатывать исключение нулевой ссылки.

при передаче пустого указателя, и метод пытается сделать что-то с e, это получит исключение нулевой ссылки с EventArgs. Пустой это не будет.

33
ответ дан Mitchel Sellers 3 December 2018 в 11:42
поделиться
  • 1
    Вопрос о представлениях, не о контроллерах представления. – Ricardo 18 March 2014 в 10:01

Если Вы используете метод общего назначения, который имеет EventHandler подпись, которой это называют от любого обработчика событий и передают и object sender и EventArgs e , это может звонить e.ToString(), например, для входа событий, не вызывая беспокойство об исключении нулевого указателя.

2
ответ дан Mark Cidade 3 December 2018 в 11:42
поделиться
  • 1
    Если у кого-либо еще есть проблема с рендерингом представления в IB, я нашел, что изменение Bundle.main к Bundle(for: ...) добивается цели. По-видимому, Bundle.main недоступно во время проектирования. – crizzis 3 October 2016 в 09:42

Я использовал долгое время "новый EventArgs ()" вместо "EventArgs. Пустой"... Я думаю, что важное должно передать что-то, что не вызовет Пустую исключительную ситуацию.

0
ответ дан Patrick Desjardins 3 December 2018 в 11:42
поделиться
  • 1
    @TomCalmon, я восстановил этот проект в Xcode 8 с Swift 3, и Автоматическая компоновка работала хорошо на меня. – Suragch 24 September 2016 в 06:13

Я верю EventArgs.Empty, используется для поддержания соглашения передачи спора с событием, даже если ни один не необходим.

Продавцы Mitchel отправили другую половину моей причины на полпути через мое сообщение: это предотвращает исключение нулевой ссылки, должен метод пытаться сделать что-то с тем аргументом (помимо проверки, если это является пустым).

EventArgs.Empty в основном делает работу глобально определенного Аргумента События без дополнительной информации.

Для предоставления подобного примера поддержания соглашения, наше использование команды string.Empty для инициализации строки, потому что в других отношениях различные кодеры могли бы использовать newString = ""; or newString = " "; or newString = null;, все из которых могут привести к различным результатам для различных условий проверки.

А (немного педантичная) причина использовать EventArgs.Empty по сравнению с new EventArgs() состоит в том, что первый не инициализирует новое EventArgs, сохраняя небольшой объем памяти.

7
ответ дан Stephen Kennedy 3 December 2018 в 11:42
поделиться
  • 1
    Причина, почему это не работает с @IBDesignable, состоит в том, что Вы не реализовали init(frame:). Как только Вы добавляете это (и вытяните весь код инициализации в [приблизительно 111] функция), это хорошо работает и показывает в IB. Посмотрите больше информации здесь: stackoverflow.com/questions/31265906/… – Dimitris 2 December 2018 в 08:35

EventArgs.Empty является экземпляром шаблона объекта Null .

По сути, наличие объекта, представляющего «нет значения», чтобы избежать проверки на null, когда используя его.

28
ответ дан 24 November 2019 в 14:44
поделиться
Другие вопросы по тегам:

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