空结合运算符覆盖

use*_*051 3 c#

我知道做以下事情是没有意义的:

xstring.ToLower()??"xx"
Run Code Online (Sandbox Code Playgroud)

因为我ToLower()在调用null之前调用了.有没有办法解决这个问题,保持语法清晰干净?

我可以覆盖??字符串的运算符,以便它只调用ToLower()xstring不是null吗?

D S*_*ley 8

不,你不能超载该运营商.只是放在.ToLowercoalesce之外:

(xstring ?? "xx").ToLower();
Run Code Online (Sandbox Code Playgroud)


Fed*_*gui 8

您正在寻找的是Monadic Null Checking.它目前在C#5中不可用,但显然它将在C#6.0中提供.

这篇文章:

7. Monadic null检查

在访问属性或方法之前,不需要检查空值.在Groovy中称为安全导航操作符).

之前

if (points != null) {
    var next = points.FirstOrDefault();
    if (next != null && next.X != null) return next.X;
}   
return -1;
Run Code Online (Sandbox Code Playgroud)

var bestValue = points?.FirstOrDefault()?.X ?? -1;
Run Code Online (Sandbox Code Playgroud)

在此期间,只需使用

(xstring ?? "xx").ToLower();

正如其他答案所示.