C#中的条件运算符和返回类型

可能重复:
为什么null需要显式类型转换?
可空类型和三元运算符。 为什么这不起作用?

试图执行以下操作:

sqlCmd.Parameters.Add("@DateCreated", System.Data.SqlDbType.DateTime).Value = myObject.DateCreated == DateTime.MinValue ? DBNull.Value : myObject.DateCreated; 

我收到此错误:

无法确定条件表达式的类型,因为’System.DBNull’和’System.DateTime’之间没有隐式转换

我很明白这个错误,但为什么类型甚至是什么,因为Parameters.Value属于对象类型? 有没有办法完成我想要做的事情?

返回值进入某个object是没有区别的,因为必须首先确定返回值的类型

将两个值中的一个( DBNull.ValuemyObject.DateCreated )转换为另一个的基础,你会没事的。 在这种情况下,基地甚至可以是object

这是一个非常常见的问题。 看看我对这个问题的回答:

条件运算符不能隐式转换?

我的博客中的这篇文章描述了一个相关的场景,也会导致用户混淆:

http://blogs.msdn.com/b/ericlippert/archive/2010/05/27/cast-operators-do-not-obey-the-distributive-law.aspx