我想使用DateTime.TryParse方法将字符串的datetime值变为Nullable.但是,当我尝试这个:
DateTime? d; bool success = DateTime.TryParse("some date text", out (DateTime)d);
编译告诉我
'out'参数未被归类为变量
不知道我需要做什么.我也尝试过:
out (DateTime)d.Value
这也不起作用.有任何想法吗?
正如Jason所说,你可以创建一个正确类型的变量并传递它.您可能希望将其封装在您自己的方法中:
public static DateTime? TryParse(string text) { DateTime date; if (DateTime.TryParse(text, out date)) { return date; } else { return null; } }
...或者如果您喜欢条件运算符:
public static DateTime? TryParse(string text) { DateTime date; return DateTime.TryParse(text, out date) ? date : (DateTime?) null; }
或者在C#7中:
public static DateTime? TryParse(string text) => DateTime.TryParse(text, out var date) ? date : (DateTime?) null;
DateTime? d=null; DateTime d2; bool success = DateTime.TryParse("some date text", out d2); if (success) d=d2;
(可能有更优雅的解决方案,但你为什么不简单地做上面的事情?)
这是Jason建议的一个稍微简洁的版本:
DateTime? d; DateTime dt; d = DateTime.TryParse(DateTime.Now.ToString(), out dt)? dt : (DateTime?)null;
你不能因为Nullable
是不同的类型DateTime
.你需要编写自己的函数来做到这一点,
public bool TryParse(string text, out NullablenDate) { DateTime date; bool isParsed = DateTime.TryParse(text, out date); if (isParsed) nDate = new Nullable (date); else nDate = new Nullable (); return isParsed; }
希望这可以帮助 :)
编辑: 删除(显然)不正确测试的扩展方法,因为(由一些不好的囤积指出)尝试更改"this"参数的扩展方法将无法使用值类型.
PS Bad Hoor有问题是老朋友:)