繁体   English   中英

空传播运算符返回 bool

[英]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.Filternull ,您实际上是将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM