由于System.DateTime和null之间没有隐式转换,无法确定条件表达式的类型。

11
DateTime tempDate = calculatesomedatetime();
someDateTimeControl.Value = null; //no issue
someDateTimeControl.Value = (tempDate > DateTime.MinValue)? tempDate : null;

由于 System.DateTime 和 null 之间没有隐式转换,无法确定条件表达式的类型

第三行代码抛出了一个错误,我不理解为什么编译器会将比较操作符 (tempDate > DateTime.MinValue)null 的赋值运算符视为同一种类型。因此编译器报错。

然而,如果我像下面这样写,就没有问题:

if(tempDate > DateTime.MinValue)
{
    someDateTimeControl.Value = tempDate;
}else
{
    someDateTimeControl.Value = null;
}

DateTime 是一个 struct 结构体。它不能被赋值为 null。你需要将其声明为可空类型(例如:DateTime? tempDate = ...),或者使用其他默认值,如 DateTime.MinValue - Rufus L
@RufusL:请参考我的第二行,该控件可以接受空值。 - SuicideSheep
哦,我最初可能读错了,但问题基本上仍然是一样的。三元运算符推断出第一部分返回的类型是 DateTime。你仍然需要将 tempDate 定义为可空类型,或在三元表达式中将其转换为可空类型。 - Rufus L
2个回答

44

问题出在三元操作符上。你将数据类型从 DateTime 更改为可空的 DateTime。三元操作符要求你在冒号前后返回相同的数据类型。做类似这样的事情可以解决:

someDateTimeControl.Value = (tempDate > DateTime.MinValue) ? (DateTime?)tempDate : null;

4

将两侧转换为可空的DateTime类型,这样它就可以在两侧返回相同的类型。

someDateTimeControl.Value = (tempDate > DateTime.MinValue)? (DateTime?)tempDate : (DateTime?)null;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接