C# 三元条件与可空类型

C# 三元条件与可空类型,c#,nullable,ternary-operator,C#,Nullable,Ternary Operator,可能重复: 你能分析一下CS1和CS2吗。当我使用\u my_date=null时,为什么我需要在CS1中添加(DateTime?)null在CS2中。如果我不在CS1中添加(DateTime?,我将被“祝福”:(由于以下错误) 无法确定条件表达式的类型,因为没有… DateTime? _my_date; DataTable _dt = GetData(); // Code Snippet 1: CS1 _my_date = _

可能重复:

你能分析一下CS1和CS2吗。当我使用
\u my_date=null时,为什么我需要在CS1中添加
(DateTime?)null
在CS2中。如果我不在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"]);
        }

因为“null”的类型无法确定。我想这与类型的大小有关。比如说null,意味着所有的位都将被设置为0(我在这里推测),那么你需要知道你的结构中有多少位。例如,一个缩写的字节数比一个日期时间少


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

cs1和cs2是什么意思?是不是通过任何方式c#1.1和c#2.0?@NoProblemBase:如果您阅读示例代码,cs1和cs2都在注释中……这不太正确。这不是大小问题,而是null是t无类型,第二种类型不是可为null的
DateTime
(只是一种常规类型)。如果是,这实际上是可以编译的。问题是编译器拒绝猜测哪种类型“大于”它应该在这里选择的两侧(因为多个类型可能是合适的)