В чем смысл Convert.ToDateTime (bool)? - PullRequest
20 голосов
/ 22 апреля 2010

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

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

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

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

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

EDIT

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

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

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

Ответы [ 3 ]

6 голосов
/ 22 апреля 2010

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

Обновление (из Convert):

public static DateTime ToDateTime(bool value)
{
    return ((IConvertible) value).ToDateTime(null);
}
4 голосов
/ 22 апреля 2010

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

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

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

3 голосов
/ 22 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...