是否有可能超负荷的空结合运营者一级在C#?

例如说我要回一个默认的价值,如果一个实例是空及返回的实例如果不是这样的。代码看起来像像这样的东西:

   return instance ?? new MyClass("Default");  

但是如果我想要使用空凝聚操作人员也检查,如果MyClass.MyValue是吗?

有帮助吗?

解决方案

好问题!它不列在重载和非重载操作的列表并没有什么提到对运营商的页面

所以,我试图以下内容:

public class TestClass
{
    public static TestClass operator ??(TestClass  test1, TestClass test2)
    {
        return test1;
    }
}

和我得到的错误“重载的二元运算符预期”。所以,我想说的答案是,作为.NET 3.5,一个没有。

其他提示

根据 通信机制详解-334 标准,这是不可能的超负荷的??操作员。

同样,不能过载的下列运营商:

  • =
  • &&
  • ||
  • ?:
  • ?.
  • 检查
  • 未经检查的
  • 新的
  • 类型
  • 作为

简单的回答:否

C#的设计原理不允许改变语言的语义操作符重载。因此复杂的运算符,如化合物分配,三元运算符和...不能被重载。

这是传闻的C#的下一个版本的部分。从 http://damieng.com/blog/十二分之二千零十三/ 09 /

可能-C-6-0的特性图示

7。一元空检查

消除了需要访问的属性或方法之前检查空值。被称为安全导航操作器在Groovy)。

之前

if (points != null) {
    var next = points.FirstOrDefault();
    if (next != null && next.X != null) return next.X;
}   
return -1;

var bestValue = points?.FirstOrDefault()?.X ?? -1;

如果任何人在这里寻找一个解决方案,最接近的例子是做到这一点

return instance.MyValue != null ? instance : new MyClass("Default");
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top