我有一个System.Collections.IList
(非通用),我想检查一下列表中是否有任何项目为空。使用Linq,我将和IEnumerable<T>
扩展名看起来像这样:
bool hasNoNullItems = myList.All(x => x != null);
有什么办法可以用System.Collections.IList
来做到这一点?
答案 0 :(得分:2)
您可以使用在非通用IEnumerable
界面上使用的Cast<T>
扩展名:
bool hasNullItems = myList.Cast<object>().Any(x => x == null);
请注意,如果没有 All(x => x != null)
项目,则true
是null
。那就是为什么我使用Any(x => x == null)
检查任何项目是否为空。
答案 1 :(得分:1)
非通用集合可以包含任何内容,因此只能安全地强制转换为object
。
因此以下两个方法相当等效:
bool anyNull = false;
foreach(object o in myList)
{
if(o == null)
{
anyNull = true;
break;
}
}
和:
var anyNull = myList.Cast<object>().Any(x ==> x == null);
或:
var anyNull = myList.Cast<object>().All(x ==> x != null);
如果在编译时知道确切的类型,则同样适用。您必须使用此方法强制转换为RealType
myList.Cast<RealType>()
等效于
foreach(RealType o in myList)