将字符串转换为一行中的DateTime可空变量

时间:2011-12-01 20:11:55

标签: c# asp.net c#-3.0

我该怎么写

string date = "12/2/2011";

DateTime? dt = date ?? DateTime.Parse(date);

这会抛出编译时错误。我知道我可以做tryparse or do if {}。有没有办法在一行中做到这一点?

4 个答案:

答案 0 :(得分:25)

尝试使用conditional operator ?:代替null-coalescing operator ??

DateTime? dt = date == null ? (DateTime?)null : DateTime.Parse(date);

您还需要将null转换为DateTime?否则会出现编译错误。

答案 1 :(得分:3)

string date = "12/2/2011";

DateTime? dt = String.IsNullOrEmpty(date) ? (DateTime?)null : DateTime.Parse(date);

答案 2 :(得分:2)

当字符串nulldt或空字符串时,此解决方案不仅会将date分配给可空的DateTime null,而且当它包含无效的日期表示时:

string date = null; // or "01/02/2011"
DateTime? dt;

DateTime temp;
if (DateTime.TryParse(date, out temp)) {
    dt = temp;
} else {
    dt = null;
}

if-else语句可以用一行三元表达式替换,但不是temp的声明:

DateTime temp;
dt = DateTime.TryParse(date, out temp) ? temp : (DateTime?)null;

答案 3 :(得分:1)

string date = "12/2/2011";
date = Convert.ToDateTime(date);