TryParse для обнуляемого типа - PullRequest
       19

TryParse для обнуляемого типа

14 голосов
/ 06 октября 2011

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

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

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

Ответы [ 2 ]

26 голосов
/ 06 октября 2011

Как насчет этого:

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

Вы получаете однострочник (к сожалению, нужен DateTime? бросок, иначе не скомпилируется) - но лично я, вероятно, придерживаюсь null инициализация и последующая if - ее проще читать.

16 голосов
/ 06 октября 2011

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

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();
...