[英]Null coalescing operator override
我知道做以下事情是沒有意義的:
xstring.ToLower()??"xx"
因為我在調查null之前調用了ToLower()
。 有沒有辦法解決這個問題,保持語法清晰干凈?
我可以覆蓋??
字符串的運算符,以便在xstring
不為null
時只調用ToLower()
?
不,你不能超載該運營商。 只需將.ToLower
放在.ToLower
之外:
(xstring ?? "xx").ToLower();
您正在尋找的是Monadic Null Checking 。 它目前在C#5中不可用,但顯然它將在C#6.0中提供。
從這篇文章 :
在訪問屬性或方法之前,不需要檢查空值。 在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;
在此期間,只需使用
(xstring ?? "xx").ToLower();
正如其他答案所示。
不,但有傳言說?.
為此,將運算符添加到下一版本的C#中。 請參閱http://damieng.com/blog/2013/12/09/probable-c-6-0-features-illustrated上的 #7
如果你想避免使用ToLower() - 字面值“xx”,你就會遇到?:三元運算符。
xstring != null ? xstring.ToLower() : "xx"
或者你可以寫一個擴展方法,但這看起來很奇怪。
public static string ToLowerOrDefault(this string input, this string defaultValue)
{
return (input != null ? input.ToLower() : defaultValue);
}
你可以這樣使用:
xstring.ToLowerOrDefault("xx")
檢查null
后應用ToLower()
方法:
(xstring ?? "xx").ToLower();
根據ECMA-334你不能覆蓋? 操作者
我會看到的唯一解決方案是:
(xstring ?? "xx").ToLower();
但是,我認為如果你做了什么會更好看
xstring != null ? xstring.ToLower() : "xx"
你可以使用:
(xstring ?? "xx").ToLower()
語法很簡單,意圖很明確。 在缺點方面,你將在"xx"
上運行ToLower
,並添加了一些括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.