TryParse к типу с нулевым значением
Я хотел бы попытаться разобрать string
как DateTime?
, и если он не сработает, установите значение null
. Единственный способ, которым я могу это сделать, это следующее, но это не кажется очень опрятным.
DateTime temp;
DateTime? whatIActuallyWant = null;
if (DateTime.TryParse(txtDate.Text, out temp)) whatIActuallyWant = temp;
Это единственный способ?
Ответы
Ответ 1
Как насчет этого:
DateTime? whatIActuallyWant = DateTime.TryParse(txtDate.Text, out temp) ? (DateTime?)temp : null;
Из этого вы получаете один-лайнер (к сожалению, команда DateTime?
иначе не будет компилироваться) - но лично я, вероятно, придерживаюсь инициализации null
и последующего if
- это просто проще читать.
Ответ 2
Если вы собираетесь выполнять эту операцию более одного раза, я рекомендую добавить простой метод расширения для удобства использования...
public static class Extensions
{
public static DateTime? ToDateTime(this string val)
{
DateTime temp;
if (DateTime.TryParse(val, out temp))
return temp;
else
return null;
}
}
Что вы можете использовать очень легко...
DateTime? ret1 = "01/01/2011".ToDateTime();
DateTime? ret2 = myString.ToDateTime();