可能要过载空结合运营商?
-
20-08-2019 - |
题
是否有可能超负荷的空结合运营者一级在C#?
例如说我要回一个默认的价值,如果一个实例是空及返回的实例如果不是这样的。代码看起来像像这样的东西:
return instance ?? new MyClass("Default");
但是如果我想要使用空凝聚操作人员也检查,如果MyClass.MyValue是吗?
解决方案
好问题!它不列在重载和非重载操作的列表拉上一>并没有什么提到对运营商的页面。
所以,我试图以下内容:
public class TestClass
{
public static TestClass operator ??(TestClass test1, TestClass test2)
{
return test1;
}
}
和我得到的错误“重载的二元运算符预期”。所以,我想说的答案是,作为.NET 3.5,一个没有。
其他提示
简单的回答:否
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");
不隶属于 StackOverflow