【发布时间】:2011-09-24 08:42:34
【问题描述】:
var dict = new Dictionary<string, object>();
DateTime? myDate;
/*Next line gives: Type of conditional expression cannot be
determined because there is no implicit conversion between 'System.DateTime?'
and 'System.DBNull' */
dict.Add("breakit", myDate.HasValue ? myDate.Value : DBNull.Value);
我不明白如果其中一个或另一个进入期望类型 Object 的字典,为什么需要进行隐式转换。
【问题讨论】:
-
这是关于 SO 的一个非常常见的问题。有关详细信息,请参阅stackoverflow.com/questions/2215745/…。另见我的相关文章blogs.msdn.com/b/ericlippert/archive/2010/05/27/…
-
@Eric 我会检查一下。谢谢!
-
不客气。问题是您的推理与编译器推理的方向相反。您是在说“我知道这将导致需要对象的东西”。但是编译器不知道您先验希望选择“对象”方法。编译器试图以另一种方式推理。它在问“期望对象与此表达式兼容的方法吗?”要知道它必须问“表达式的类型是什么?” 问题是它无法计算出表达式的类型来决定表达式是否有效。
标签: c# ternary-operator implicit-conversion