TryParse为可空类型

时间:2011-10-06 02:44:19

标签: c# .net null nullable tryparse

我想尝试将string解析为DateTime?,如果失败则将值设置为null。我能想到的唯一方法是做到这一点,但看起来并不是很整洁。

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

这是唯一的方法吗?

2 个答案:

答案 0 :(得分:26)

这个怎么样:

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

你得到一个单行(不幸的是需要DateTime?强制转换,否则将无法编译) - 但我个人可能会坚持null初始化和随后的{{1} - 它更容易阅读。

答案 1 :(得分:16)

如果你要多次执行此操作,我建议添加一个简单的扩展方法以方便使用...

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