我有從文章下面的代碼,我挺不理解他們關於使用空運營商的差異:空,操作混亂
if (memberAccessExpr?.Name.ToString() != "Match") return;
這一次我很清楚我猜測,檢查memberAccessExpr
爲空,如果它爲空,與「匹配」的比較返回false,是否正確?
混亂配備了第二個:
if (memberSymbol?.ToString().StartsWith("System.Text.RegularExpressions.Regex.Match") ?? true) return;
這行代碼在我看來,幾乎是一樣的第一,因爲我做一個簡單的空檢查,然後調用,它返回一個函數布爾值(!=
與StartsWith
)...那麼爲什麼我需要一個額外的?? - 運算符在這裏,而不是在第一行?也許這與隱含的== true
比較有關,它會在沒有??運算符的情況下發生?
我不知道,也許你們可以賜教:)
乾杯, 邁克爾
還好現在我明白了,因爲在第二行表達的是一個可空bool..confusing stuff..but感謝好的答案:) –
它成爲一個爲空的布爾值,因爲你正在使用''。''運算符,因此它需要能夠同時保存'null'值和右邊表達式(它是'bool')的結果,因此'bool?'。請注意,代碼不是編譯器所做的,這就是我寫給你解釋 – Jcl
所以基本上,如果一個對象調用什麼東西?返回簡單類型的運算符,我可以檢查結果嗎?運算符,因爲它成爲可空類型,對吧? –