如何使用DateTime.TryParse和Nullable <DateTime>?
我想使用DateTime.TryParse方法来获取一个string的date时间值为Nullable。 但是当我尝试这个:
DateTime? d; bool success = DateTime.TryParse("some date text", out (DateTime)d);
编译器告诉我
“out”参数不被分类为variables
不知道我需要在这里做什么。 我也试过:
out (DateTime)d.Value
那也行不通。 有任何想法吗?
DateTime? d=null; DateTime d2; bool success = DateTime.TryParse("some date text", out d2); if (success) d=d2;
(可能有更优雅的解决scheme,但是为什么不简单地按照上面的方法做?)
正如杰森所说,你可以创build一个正确的types的variables,并通过它。 你可能想把它封装在你自己的方法中:
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;
您不能因为Nullable<DateTime>
是与DateTime
不同的types。 你需要编写自己的function来做到这一点,
public bool TryParse(string text, out Nullable<DateTime> nDate) { DateTime date; bool isParsed = DateTime.TryParse(text, out date); if (isParsed) nDate = new Nullable<DateTime>(date); else nDate = new Nullable<DateTime>(); return isParsed; }
希望这可以帮助 :)
编辑:删除(明显)不正确的testing扩展方法,因为(指出一些坏房子)扩展方法试图改变“这个”参数将无法与值types。
PS坏Hoor问题是一个老朋友:)
下面是Jason提出的一个稍微精简的版本:
DateTime? d; DateTime dt; d = DateTime.TryParse(DateTime.Now.ToString(), out dt)? dt : (DateTime?)null;
那么创build一个扩展方法呢?
public static class NullableExtensions { public static bool TryParse(this DateTime? dateTime, string dateString, out DateTime? result) { DateTime tempDate; if(! DateTime.TryParse(dateString,out tempDate)) { result = null; return false; } result = tempDate; return true; } }
我不明白为什么微软不处理这个问题。 一个聪明的小实用方法来处理这个(我有int的问题,但用DateTimereplaceint将是相同的效果,可以是…..
public static bool NullableValueTryParse(string text, out int? nInt) { int value; if (int.TryParse(text, out value)) { nInt = value; return true; } else { nInt = null; return false; } }