我想尝试解析string
作为DateTime?
,如果失败,则将值设置为null
。我能想到做到这一点的唯一方法是以下几点,但看起来并不太整齐。TryParse为可空类型
DateTime temp;
DateTime? whatIActuallyWant = null;
if (DateTime.TryParse(txtDate.Text, out temp)) whatIActuallyWant = temp;
这是唯一的方法吗?
我想尝试解析string
作为DateTime?
,如果失败,则将值设置为null
。我能想到做到这一点的唯一方法是以下几点,但看起来并不太整齐。TryParse为可空类型
DateTime temp;
DateTime? whatIActuallyWant = null;
if (DateTime.TryParse(txtDate.Text, out temp)) whatIActuallyWant = temp;
这是唯一的方法吗?
如何:
DateTime? whatIActuallyWant = DateTime.TryParse(txtDate.Text, out temp) ? (DateTime?)temp : null;
你得到一个班轮出这(不幸的是需要DateTime?
投,否则将无法编译) - 但我个人可能会坚持到null
初始化和随后的if
- 阅读起来很简单。
我之前试过,但它返回错误:条件表达式的类型无法确定,因为'System.DateTime'和'
@James:将演员视为DateTime? - 不幸的是它是必要的,因为这两个词都必须是隐式可转换的 - 另一种是“? temp:(DateTime?)null;' – BrokenGlass
@James,让我们来看看这个。你必须声明'temp'变量,所以添加那行。所以我们已经将你的代码的三行减少到了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();
考虑使用通用转换http://stackoverflow.com/questions/773078/convert-string-to-nullable-type-int-double-etc –
可能重复[通用TryParse](http:// stackoverflow。 com/questions/2961656/generic-tryparse) –