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
(只是一种常规类型)。如果是,这实际上是可以编译的。问题是编译器拒绝猜测哪种类型“大于”它应该在这里选择的两侧(因为多个类型可能是合适的)