Преобразуйте объект к типу datetime


public static DateTime ObjectToDateTime(object o, DateTime defaultValue)
{            
    if (o == null) return defaultValue;

    DateTime dt;
    if (DateTime.TryParse(o.ToString(), out dt))
        return dt;
    else
        return defaultValue;
}

Код чувствует себя слишком длинно и плохо пахнет. Есть ли лучший способ?



56682
19
задан 4 августа 2011 в 05:08 Источник Поделиться
Комментарии
2 ответа

На навскидку шанс, что ваш объект уже есть типа datetime, вы выполняете ненужных преобразований от строк.

 if (o is DateTime)
return (DateTime)o;

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

Например, если у вас есть объект DataTable с колонной CreatedDate, вы должны знать, что это свидание, чего вы можете не знать, если это имеет значение, если столбец допускает значения NULL в базе данных. Это нормально, вы можете справиться с этим в коде.

 var createdDate = row.Field<DateTime?>("CreatedDate"); 

Там мы идем, это типа datetime?, без кодирования преобразования необходимы. Вы можете даже указать по умолчанию и тип если типа datetime

 var createdDate = row.Field<DateTime?>("CreatedDate").GetValueOrDefault(DateTime.Now);
var createdDate = row.Field<DateTime?>("CreatedDate") ?? DateTime.Now;

26
ответ дан 4 августа 2011 в 08:08 Источник Поделиться

Мне нравится решение @ChaosPandion, однако я считаю, после немного быстрее читать.

public static DateTime ObjectToDateTime(object o, DateTime defaultValue)
{
DateTime result;
if (DateTime.TryParse((o ?? "").ToString(), out result)) {
return result;
} else {
return defaultValue;
}
}

Если вы предпочитаете явный нуль, проверить, изменить, если заявление немного...

    if (o != null && DateTime.TryParse(o.ToString(), out result)) {

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

2
ответ дан 4 августа 2011 в 07:08 Источник Поделиться