有没有人知道为什么会这样:
if (_item.Created == DateTime.MinValue)
{
ListSqlParam.Add(new SqlParameter("@TransactionCreated", DBNull.Value));
}
else
{
ListSqlParam.Add(new SqlParameter("@TransactionCreated", _item.Created));
}
但不是这样:
ListSqlParam.Add(new SqlParameter("@TransactionCreated",((_item.Created == DateTime.MinValue) ? DBNull.Value : _item.Created)));
答案 0 :(得分:3)
原因是条件运算符是特定类型的表达式。编译器根据运算符的两个分支中的表达式类型来推断此特定类型
在您的代码中,编译器不能使用此特定类型,因为DBNull.Value
和_item.Created
具有不同且不相关的类型。你不能将任何一个转换为另一个的类型。
要使其有效,请将至少一个分支投射到object
:
(_item.Created == DateTime.MinValue) ? (object)DBNull.Value : _item.Created
答案 1 :(得分:0)
当使用conditional operator时,条件的不同边(真分支和假分支)返回的两种类型应该相同或者可以隐式地相互转换。
DBNull.Value
和DateTime
不是这样的值。
答案 2 :(得分:0)
改为使用SqlDateTime:
_item.Created == DateTime.MinValue ? SqlDateTime.Null : new SqlDateTime(_item.Created)