TryParse为可空类型

Jam*_*mes 14 .net c# null nullable tryparse

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

DateTime temp;
DateTime? whatIActuallyWant = null;
if (DateTime.TryParse(txtDate.Text, out temp)) whatIActuallyWant = temp;
Run Code Online (Sandbox Code Playgroud)

这是唯一的方法吗?

Bro*_*ass 27

这个怎么样:

DateTime? whatIActuallyWant = DateTime.TryParse(txtDate.Text, out temp) ? (DateTime?)temp : null;
Run Code Online (Sandbox Code Playgroud)

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

  • @James:我不会那样做 - 如果你希望你的解析可能会失败使用`TryParse` - 在任何情况下抛出的异常在运行时都是非常昂贵的,我会尽量避免这种情况. (3认同)
  • @James:请参阅“DateTime?”的转换 - 不幸的是,它是必要的,因为这两个术语必须是隐式可转换的 - 另一种选择是“?” 临时:(日期时间?)null;` (2认同)

Phi*_*ght 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以很容易地使用它......

DateTime? ret1 = "01/01/2011".ToDateTime();
DateTime? ret2 = myString.ToDateTime();
Run Code Online (Sandbox Code Playgroud)