【问题标题】:Null coalescing operator with the variable itselfNull 合并运算符与变量本身
【发布时间】:2017-06-09 08:56:51
【问题描述】:

当我们检查的变量是如果它不为空时我们将分配的变量时,有什么方法可以减少空合并运算符表达式?

例子:

DateTime? date1 = DateTime.Parse("11/05/1990");
DateTime? date2 = DateTime.Now;
date1 = date1 ?? date2;

例如,类似的事情:

date1 = ?? date2;

我知道这没什么大不了的,但我很好奇。

【问题讨论】:

  • 你不能。如果您有兴趣,请查看 msdn 的运营商列表msdn.microsoft.com/en-us/library/6a71f45d.aspx
  • 是的,我试过了,但出现“表达式除外”错误。
  • 已经有人请求??= 运算符或类似的东西。但它不存在。他们花时间和精力去实施它还不够重要。
  • 我更喜欢使用 if 语句检查 null 以防止额外分配。 if(date == null) date = date2;。这也不是微优化,只是见仁见智
  • 我不知道你为什么选择这个例子,也许你的真实代码会从这样的运算符中受益,但我只是想确保你知道这个例子为什么会误导:两者都 @987654326 @ 和 date2Nullables,但永远不会是 null

标签: c# conditional-statements null-coalescing-operator


【解决方案1】:

不,这在 C# 中不存在。

您可以在https://msdn.microsoft.com/nl-nl/library/6a71f45d.aspx中找到运算符列表。

但是date1 = date1 ?? date2 还不够短吗?

【讨论】:

  • 感谢您提出这个简单而完整的问题。是的,但就像我说的那样,我很好奇,当我遇到这种情况时,这个问题一直在我脑海中浮现。现在,我会的。
【解决方案2】:

没有。如果有的话:

_field ?? (_field = CalculateFieldValue());

在记忆属性中不会那么常见。

【讨论】:

    【解决方案3】:

    C# 8.0 开始,可以使用空合并赋值运算符??=

    原来如此

    date1 ??= date2;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2016-04-02
      • 2023-03-07
      • 2021-05-27
      • 1970-01-01
      • 2015-03-27
      相关资源
      最近更新 更多