Подтвердить что ты не робот

TryParse к типу с нулевым значением

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

DateTime temp;
DateTime? whatIActuallyWant = null;
if (DateTime.TryParse(txtDate.Text, out temp)) whatIActuallyWant = temp;

Это единственный способ?

4b9b3361

Ответ 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();