我试图安全地检查一个 IList<>
是否为空。
var Foo = Bar.GimmeIListT(); // Returns an IList<SomeObject>
if (Foo?.Any())
// Do cool stuff with items in Foo
但条件存在一个错误:
无法隐式转换 'bool?' 到 'bool'。存在一个显式转换 (您是否缺少强制类型转换?)
看起来条件计算出一个可空的布尔值,所以我尝试
if (Foo?.Any().Value())
但这也不好:
“bool”不包含“Value”的定义,也没有扩展.... blah blah blah
因此,在第一个示例中,它抱怨它是可空的bool,但在第二个示例中则抱怨它不是。
作为另一种方法,我尝试:
if (Foo?.Any() == true)
这个代码是可以正常运行的 - 但它不应该工作,因为它使用了一个隐式转换,而第一个信息说它不想要这种方式!
到底发生了什么?正确的做法是什么?
Foo
实际上是一个需要花费数小时才能完全执行的查询,你将非常需要Any
。如果你想知道是否至少有一个,就不要全部计算。 - Tim Schmelter