三元条件和可空类型

时间:2011-07-28 13:59:14

标签: c# nullable ternary-operator

  

可能重复:
  Why is this code invalid in C#?

请你分析一下CS1和CS2。当我在CS2中使用(DateTime?)null时,为什么我需要在CS1中添加_my_date = null;。如果我没有在CS1中添加(DateTime?),我会被'祝福':(由于以下错误 无法确定条件表达式的类型,因为没有....

        DateTime? _my_date;
        DataTable _dt = GetData();

        // Code Snippet 1: CS1
        _my_date = _dt.Rows[0]["MyDate"] == DBNull.Value ? (DateTime?)null : Convert.ToDateTime(_dt.Rows[0]["MyDate"]);

        // Code Snippet 2: CS2
        if (_dt.Rows[0]["MyDate"] == DBNull.Value)
        {
            _my_date = null;
        }
        else
        {
            _my_date = Convert.ToDateTime(_dt.Rows[0]["MyDate"]);
        }

1 个答案:

答案 0 :(得分:0)

因为无法确定'null'的类型。我想这与类型的大小有关。比如说null,意味着所有的位都将设置为0(我在这里推测),然后你需要知道你的结构中有多少位。例如,short可以比DateTime更少的字节。

因此,在这种情况下,您需要告知它所期望的类型,因为它无法将null转换为可为空的日期时间。