我有从文章下面的代码,我挺不理解他们关于使用空运营商的差异:空,操作混乱
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
所以基本上,如果一个对象调用什么东西?返回简单类型的运算符,我可以检查结果吗?运算符,因为它成为可空类型,对吧? –