【问题标题】:ternary condition and nullable types [duplicate]三元条件和可为空的类型
【发布时间】:2011-07-28 13:59:13
【问题描述】:

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

请您分析一下 CS1 和 CS2。为什么我需要在 CS1 中添加 (DateTime?)null 而我在 CS2 中使用 _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"]);
        }

【问题讨论】:

  • cs1和cs2是什么意思?无论如何是 c# 1.1 和 c# 2.0 吗?
  • @NoProblemBase:如果您阅读示例代码,CS1 和 CS2 在 cmets...

标签: c# nullable ternary-operator


【解决方案1】:

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

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

【讨论】:

  • 这不太对。这不是大小问题,而是 null 是无类型的,而第二种类型不是可空的 DateTime(只是一个普通的)。如果是这样,这实际上编译。问题是编译器拒绝猜测哪种类型比它应该在这里选择的两边“更大”(因为多种类型可能是合适的。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 2017-11-16
  • 1970-01-01
  • 2019-11-11
相关资源
最近更新 更多