Это не совсем ответ на вопрос, но: вызывать исключение и перехватывать его считается плохой практикой, когда простого теста if
было бы достаточно. Изменить: Кроме того, поскольку исключение, по-видимому, вызвано попыткой привести null
к DateTime
(это тип значения, который я должен был увидеть - благодаря комментаторам, которые были более бодрыми, чем я), вам необходимо проверьте frmSetTimer.Tag
перед кастингом. Попробуйте следующее:
frmSetTimer.ShowDialog();
if (frmSetTimer.Tag == null) {
Status = DRMStatus.Inactive;
StatusChanged();
}
else {
SetDataRunTimer((DateTime)frmSetTimer.Tag);
Status = DRMStatus.Scheduled;
}
Предполагается, что SetDataRunTimer()
не имеет побочных эффектов, которые вы хотели бы вызвать, даже если аргумент нулевой. Если это так, то вам нужно вызывать его независимо от того, является ли аргумент нулевым или нет, вы должны изменить этот метод, чтобы либо обрабатывать ноль изящно (и, возможно, возвращать bool
, который указывает, хорошо ли все прошло, либо нет), или выдает ArgumentNullException
. Кроме того, потребуется DateTime?
, чтобы вообще можно было пройти null
. NullReferenceException
никогда не должен генерироваться безошибочным кодом и не должен быть явно перехвачен - таким образом, любой NullReferenceException
всегда указывает на ошибку программирования.