可以覆盖null合并运算符吗?

Pat*_*son 41 .net c# operator-overloading null-coalescing-operator

是否可以在C#中覆盖类的null-coalescing运算符?

比方说,如果实例为null,我想返回默认值,如果不是,则返回实例.代码看起来像这样:

   return instance ?? new MyClass("Default");  
Run Code Online (Sandbox Code Playgroud)

但是如果我想使用null-coalescing运算符来检查是否设置了MyClass.MyValue呢?

当然没有真正的需要(至少我是这么认为) - 所以在你回答"你为什么要这样做"之前 - 我只是好奇是否有可能.

Sim*_*mon 30

好问题!它没有在可重载和不可重载的运算符列表中以这种或那种方式列出,并且在运营商页面上没有提到任何内容.

所以我尝试了以下方法:

public class TestClass
{
    public static TestClass operator ??(TestClass  test1, TestClass test2)
    {
        return test1;
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到错误"预期可重载二进制运算符".所以我要说答案是,从.NET 3.5开始,没有.


Pet*_*lon 14

根据ECMA-334标准,不可能超载?运营商.

同样,您不能重载以下运算符:

  • =
  • &&
  • ||
  • 检查
  • 未选中
  • 类型


Meh*_*ari 7

简单回答:不

C#设计原则不允许运算符重载改变语言的语义.因此,复合赋值,三元运算符和...等复杂运算符不能重载.