![](/img/trans.png)
[英]Error when using the null-propagating / null-conditional operator
[英]null-propagating operator returning bool
我有一个返回 bool 的“ Func<bool> Filter
”委托。 但是,我的类的用户不需要提供这个,如果没有提供,默认值应该是 true。 但是,如果过滤器为空,则结果等于 false。 我不知道为什么。 我认为该声明基本上不会导致任何事情发生,并且仍然是真实的。 如果可能的话,我错过了什么,我怎么能用这种速记方式做到这一点。 我知道我可以用不同的方式写出来,但我试图用这种新的速记方式来理解这个想法。
bool? result = true;
result = h.Filter?.Invoke(args); // IF Filter IS NULL THIS LINE TURNS result TO FALSE
if (result != null || result == true)
{
yield return h.Callback(args);
h.Post?.Invoke(args);
}
我认为您误解了您的代码的作用。 具体来说,你的 if 语句。
当h.Filter
为null
,您实际上是将null
分配给结果:
bool? result = null;
现在,如果我们要测试您的“真实”陈述,我们会看到:
Console.WriteLine("!= null: {0}", result != null); // != null: false
Console.WriteLine("== true: {0}", result == true); // == true: false
所以你的条件不满足。
看起来你真正想要的是这个( == null
,而不是!= null
):
if (result == null || result == true)
可以更简洁地写成:
if (result.GetValueOrDefault(true))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.