Я делал некоторые стандартные программы преобразования типов вчера вечером для системы, я продолжаю работать. Одно из преобразований включает превращающие строковые значения в их эквиваленты DateTime.
При выполнении этого я заметил что Преобразование. ToDateTime () метод имел перегрузку, которая приняла булев параметр.
Первый вопрос? При каких обстоятельствах это могло когда-либо быть полезно?
Я пошел немного далее и попытался выполнить метод в QuickWatch. Так или иначе (TRUE или FALSE), стандартная программа возвращает InvalidCastException.
Второй вопрос? Почему этот метод даже здесь?
Править
Спасибо за ответы, парней. Я вижу, как это имеет смысл с договорной точки зрения, но это действительно кажется нечетным, что базовая платформа включает методы это:-
Это немного похоже на кого-то делающего автомобиль, загруженный средствами управления, которые активно мешают Вашему механизму работать при использовании.
Это имеет смысл, потому что ToDateTime
является частью интерфейса IConvertible
, реализованного с помощью bool
. Если вы посмотрите в отражатель, вы увидите, что он генерирует исключение InvalidCastException
.
Обновление (из Конвертировать
):
public static DateTime ToDateTime(bool value)
{
return ((IConvertible) value).ToDateTime(null);
}
Если вы посмотрите внимательно, большинство перегрузок недопустимы и вызовут исключение InvalidCastException
.
Он должен реализовать все приведений, поскольку он реализует IConvertible
, и это единственный способ сделать это правильно.
Я думаю, что это сделано для полноты и что вы получаете явное исключение InvalidCastException при вызове Convert.ToDateTime с объектом, который является логическим значением.
Если вы посмотрите на все члены Convert, вы увидите, что были включены перегрузки, чтобы принимать все базовые типы для преобразования в каждый из других базовых типов, при этом InvalidCastExceptions выбрасывается, когда нет разумного преобразования.
Думаю, они думали, что это будет более значимым, чем просто отсутствие перегрузок вообще.