我试图安全地检查IList<>
是否为空。如何为布尔条件的空合并?
var Foo = Bar.GimmeIListT(); // Returns an IList<SomeObject>
if (Foo?.Any())
// Do cool stuff with items in Foo
但没有与条件的错误:“布尔”
无法隐式转换到'布尔'。一个显式转换存在(是否缺少强制转换?)
如此看来条件的计算结果为可空布尔,所以我尽量
if (Foo?.Any().Value())
但是,这是没有好或者:
“布尔”不包含“值”的定义,并没有扩展....等等等等
所以在F等等第一个例子它抱怨说它是一个可空的布尔,但在第二个它抱怨它不是。
作为另一种途径我尝试:
if (Foo?.Any() == true)
此工程 - 但它不应该,因为这里采用隐式转换,其第一条消息说,它不想!
这是怎么回事?什么是正确的方法来做到这一点?
如果(?富.Count之间> 0){} –
@ AndzejMaciusovic:这是一个糟糕的方式。如果'Foo'实际上是一个需要数小时才能完成的查询,那么你会错过任何'糟糕的'。如果你想知道是否至少有一个,不要全数。 –
@TimSchmelter在我的示例中,我使用.Count而不是Count().Count已经是IList计算的字段,实际上使用.Count代替.Any()会快一点。在列表上。 –