18

我想尝试将 a 解析string为 a DateTime?,如果失败则将值设置为null. 我能想到的唯一方法是以下,但它似乎不是很整洁。

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

这是唯一的方法吗?

4

2 回答 2

33

这个怎么样:

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

你从中得到了一个单行符(不幸的是需要DateTime?演员否则不会编译) - 但我个人可能会坚持null初始化和后续if- 它更容易阅读。

于 2011-10-06T02:47:40.117 回答
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();
于 2011-10-06T03:02:10.933 回答