2011-01-25 83 views
3

可能重复:
Type result with conditional operator in C#设置日期时间问题?为null使用三元操作

我只是工作的一个弹出修改用户,当我遇到了以下问题,而试图修改用户的死亡日期:

在这种情况下,用户的属性DeathDateTime?(可空日期时间)。

user.Death = (model.Death != null) ? DateTime.Parse(model.Death) : null; 

所以我想,如果包含在模型中的价值,我将能够简单地检查(model.Death是string)包含的值,我想那个数值的日期,否则我会设置如上所示,为空。

但是,我无法使用这种语法,因为它不允许我使用三元运算符将user.Death明确设置为空,尽管user.Death = null工作得很好。

解决方案应用于:

替换: null: new Nullable<DateTime>()

我想我只是想知道,为什么我不能明确地设置可空DateTime的财产使用三元运算符为空?

+1

常见问题,请查看上面的链接。简短版本:DateTime和null不能相互转换,因此无法确定表达式的返回类型。将一个或两个投射到所需的返回类型是您需要执行的操作,或者(如您所找到的)在表达式中提供另一种类型以允许一个可以转换为另一个类型。 – 2011-01-25 18:53:39

回答

5

这不起作用,因为编译器不会一次插入双方的隐式转换。

您希望编译器为DateTime值转换为DateTime?在一边,和nullDateTime?在另一边。
这不可能发生。

如果您明确地将其中一半转换为DateTime?,则另一半也会隐式转换。

0

我怀疑如果user.Death = null会工作,如果死亡没有声明为可空类型。

例如, “DateTime?death = null”会正常工作,而“DateTime death = null”不会编译。