【问题标题】:Coalesce operator in C#?C# 中的合并运算符?
【发布时间】:2011-04-24 22:53:30
【问题描述】:

我想我记得在 C# 中看到过类似于 ?: ternary operator 的东西,它只有两个部分,如果它不为 null 则返回变量值,如果是则返回默认值。像这样的:

tb_MyTextBox.Text = o.Member ??SOME OPERATOR HERE?? "default";

基本上相当于这个:

tb_MyTextBox.Text = o.Member != null ? o.Member : "default";

这样的事情是否存在,或者我只是想象在某处看到它?

【问题讨论】:

  • @Junior 但这是关于三元运算符,而这是关于合并运算符(尽管有标题)
  • @Junior,虽然我的问题的标题有点误导,但如果您阅读我的问题,您会发现它与您建议的副本无关。
  • @Rup,确实标题有点混乱。就像@Abe 正在寻找spinningtheweb.blogspot.com/2006/09/c-coalesce-operator.html 一样。也许他可以调整他的问题标题。
  • ??这里有操作员?? - 如此接近,如此接近...... ;>

标签: c# .net asp.net null-coalescing-operator


【解决方案1】:

嗯,它与conditional operator 不太一样,但我认为您正在考虑null coalescing operator (??)。 (我猜你确实说过它是“相似的” :) 请注意,“三元”只是指运算符的操作数 - 所以虽然条件运算符是三元运算符,但空合并运算符是二元运算符。

大致采用这种形式:

result = first ?? second;

这里的second 只有在first 为空时才会被评估。它不必是赋值的目标 - 例如,您可以使用它来评估方法参数。

请注意,第一个操作数 必须 可以为空 - 但第二个不可以。尽管有一些关于转换的具体细节,但在简单的情况下,整个表达式的类型是第二个操作数的类型。由于关联性,您也可以巧妙地堆叠运算符的使用:

int? x = GetValueForX();
int? y = GetValueForY();
int z = GetValueForZ();

int result = x ?? y ?? z;

注意xy 是如何可以为空的,但zresult 不是。当然,z 可以可以为空,但 result 也必须可以为空。

基本上,操作数将按照它们在代码中出现的顺序进行计算,当发现非空值时停止计算。

哦,虽然上面显示的是值类型,但它也适用于引用类型(它们总是可以为空)。

【讨论】:

    【解决方案2】:

    是的,它被称为 Null Coalescing 运算符:

    ?? Operator (C# Reference) (MSDN)

    【讨论】:

      【解决方案3】:

      有趣的是,您使用“??SOME OPERATOR HERE??”,因为您要查找的运算符是“??”,即:

      tb_MyTextBox.Text = o.Member ?? "default";
      

      http://msdn.microsoft.com/en-us/library/ms173224.aspx

      【讨论】:

      • 呵呵,一定是我的潜意识伸出了手。知道我在哪里见过。
      【解决方案4】:

      是的:

      tb_myTextBox.Text = o.Member ?? "default";
      

      http://msdn.microsoft.com/en-us/library/ms173224(VS.80).aspx

      【讨论】:

        猜你喜欢
        • 2011-02-13
        • 2012-09-23
        • 2012-04-12
        • 2011-11-08
        • 2018-12-12
        • 2011-03-26
        • 2013-06-11
        • 2010-12-19
        • 1970-01-01
        相关资源
        最近更新 更多