【问题标题】:C#--How do I use a Null Coalescing operator to allow use of an extension method that won't accept null parameters?C#--如何使用 Null Coalescing 运算符来允许使用不接受 null 参数的扩展方法?
【发布时间】:2013-08-02 23:30:26
【问题描述】:

我有一个属性,它是 LINQ 语句中选择子句的一部分。这是一个需要转换为 UTC 的截止日期。

不幸的是,这个特定的属性是一个可以为空的日期时间对象,所以我被阻止使用.ToUniversalTime() 扩展。

不应该允许我使用空合并运算符来处理这个吗?我正在尝试这样做,但编译器对此并不满意:

item.DueDate ?? null ?? item.DueDate.ToUniversalTime().ToString("o")

我在这里遗漏了一些简单的东西吗?

【问题讨论】:

    标签: c# linq operators nullable


    【解决方案1】:
    item.DueDate == null ? null : item.DueDate.Value.ToUniversalTime().ToString("o")
    

    【讨论】:

    • .Value 太棒了!谢谢。
    【解决方案2】:

    Nullable<T> 上使用GetValueOrDefault 方法,比三元或空值合并要干净得多:

    item.DueDate.GetValueOrDefault(yourDefaultHere).ToUniversalTime();
    

    【讨论】:

    • 这很有希望,但我在GetValueOrDefault 的方法签名中所做的一切都失败了。我原以为简单地输入null 就可以了,但它正在寻找一个可以为空的日期时间对象。
    【解决方案3】:

    您不能使用 null 合并运算符来处理在可空对象上调用方法的情况。

    试试下面的。

    item.DueDate != null ? item.DueDate.ToUniversalTime().ToString("o") : null;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-28
      • 2020-11-03
      • 2014-07-04
      • 2015-01-20
      • 1970-01-01
      • 2011-12-03
      • 2018-09-22
      • 1970-01-01
      相关资源
      最近更新 更多