Подтвердить что ты не робот

В чем смысл Convert.ToDateTime(bool)?

Вчера я делал некоторые процедуры преобразования типов для системы, над которой я работаю. Одно из преобразований включает преобразование значений строк в их эквиваленты DateTime.

При этом я заметил, что метод Convert.ToDateTime() имел перегрузку, которая принимала логический параметр.

Первый вопрос? При каких обстоятельствах это может быть полезно?

Я пошел немного дальше и попытался выполнить метод в QuickWatch. В любом случае (true или false) процедура возвращает InvalidCastException.

Второй вопрос? Почему этот метод даже здесь?

ИЗМЕНИТЬ

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

  • Невозможно работать
  • Хуже, на самом деле будет генерировать исключение, когда кто-то попытается вызвать его.

Это немного похоже на то, что кто-то заставляет машину загружаться с помощью элементов управления, которые активно останавливают работу вашего автомобиля при использовании.

4b9b3361

Ответ 1

Это имеет смысл, потому что ToDateTime является частью интерфейса IConvertible, реализованного bool. Если вы посмотрите в отражатель, вы увидите, что он выбрал InvalidCastException.

Обновить (от Convert):

public static DateTime ToDateTime(bool value)
{
    return ((IConvertible) value).ToDateTime(null);
}

Ответ 2

Я думаю, что это для полноты и что вы получаете явное InvalidCastException при вызове Convert.ToDateTime с объектом, который является bool.

Если вы посмотрите на всех членов Convert, вы можете увидеть, что перегрузки были включены, чтобы принять все базовые типы для преобразования в каждый из других базовых типов, при этом InvalidCastExceptions бросаются, когда нет разумного преобразования.

Я думаю, они думали, что это будет более значимым, чем просто отсутствие перегрузок там.

Ответ 3

Если вы посмотрите внимательно, большинство перегрузок недействительны и выкинет InvalidCastException.

Он должен реализовать все приведения, поскольку он реализует IConvertible, и это единственный способ сделать это правильно.