В чем смысл Convert.ToDateTime(bool)?
Вчера я делал некоторые процедуры преобразования типов для системы, над которой я работаю. Одно из преобразований включает преобразование значений строк в их эквиваленты DateTime.
При этом я заметил, что метод Convert.ToDateTime() имел перегрузку, которая принимала логический параметр.
Первый вопрос? При каких обстоятельствах это может быть полезно?
Я пошел немного дальше и попытался выполнить метод в QuickWatch. В любом случае (true или false) процедура возвращает InvalidCastException.
Второй вопрос? Почему этот метод даже здесь?
ИЗМЕНИТЬ
Спасибо за ответы, ребята. Я вижу, как это имеет смысл с точки зрения контракта, но кажется странным, что основная структура включает в себя методы, которые: -
- Невозможно работать
- Хуже, на самом деле будет генерировать исключение, когда кто-то попытается вызвать его.
Это немного похоже на то, что кто-то заставляет машину загружаться с помощью элементов управления, которые активно останавливают работу вашего автомобиля при использовании.
Ответы
Ответ 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
, и это единственный способ сделать это правильно.