检查是否有任何项目为System.Collections.IList的null

时间:2018-09-19 07:56:56

标签: c# linq

我有一个System.Collections.IList(非通用),我想检查一下列表中是否有任何项目为空。使用Linq,我将和IEnumerable<T>扩展名看起来像这样:

bool hasNoNullItems = myList.All(x => x != null);

有什么办法可以用System.Collections.IList来做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以使用在非通用IEnumerable界面上使用的Cast<T>扩展名:

bool hasNullItems = myList.Cast<object>().Any(x => x == null);

请注意,如果没有 All(x => x != null)项目,则truenull。那就是为什么我使用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)