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

时间:2011-03-22 03:00:49

标签: c# sql types type-conversion ternary-operator

  

可能重复:
  Why does null need an explicit type cast here?
  Nullable types and the ternary operator. Why won't this work?

尝试执行以下操作:

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

我收到此错误:

  

条件表达式的类型不能   确定是因为没有   之间的隐式转换   'System.DBNull'和'System.DateTime'

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

2 个答案:

答案 0 :(得分:3)

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

将两个值中的一个(DBNull.ValuemyObject.DateCreated)投射到另一个的基础上,你会没事的。在这种情况下,基数甚至可以是object

答案 1 :(得分:1)

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

Conditional operator cannot cast implicitly?

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

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