Работает без .ToString()
, поскольку Console.WriteLine()
имеет перегрузку , которая принимает аргумент Object
. Поскольку все происходит от Object
, а Object
имеет собственный метод ToString()
, если нет лучшего соответствия, эта версия метода может принять что угодно и попытаться распечатать его .
Вы можете думать о перегруженном методе так:
public static void WriteLine(object value)
{
WriteLine(value.ToString());
}
... такой, что эта перегрузка в свою очередь вызывает string
перегрузку .
.Net - это строго типизированная платформа. Полезно иметь представление о том, с какими типами вы имеете дело для каждой части утверждения.
Для значений DateTime
они не хранятся внутри в удобочитаемом формате. Если вы хотите увидеть хорошее значение «5/1/2018
» или «2018-05-01
» при печати на консоли, это строки , и вам нужно преобразовать DateTime
в string
каким-то образом. Делая это в своем коде, вместо того, чтобы перегрузка Object справилась с этим, легче вернуться и определиться с тем, какой формат вы хотите. Но любая версия действительно "хорошо".