首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查IEnumerable是否为null或空?

如何检查IEnumerable是否为null或空?
EN

Stack Overflow用户
提问于 2011-02-19 06:44:21
回答 20查看 258.8K关注 0票数 176

我喜欢string.IsNullOrEmpty方法。我喜欢有一些东西,将允许相同的功能为IEnumerable。有这样的情况吗?也许是一些集合帮助器类?我问这个问题的原因是,如果模式是(mylist != null && mylist.Any()),那么在if语句中,代码看起来很混乱。如果有Foo.IsAny(myList)就更干净了。

这篇文章没有给出答案:IEnumerable is empty?

EN

回答 20

Stack Overflow用户

发布于 2011-02-19 06:47:00

代码语言:javascript
复制
public static bool IsNullOrEmpty<T>(this IEnumerable<T> enumerable) {
    return enumerable == null || !enumerable.Any();
}
票数 126
EN

Stack Overflow用户

发布于 2014-07-12 04:32:10

这是@Matt Greer有用答案的修改版本,其中包括一个静态包装器类,这样您就可以将其复制粘贴到新的源文件中,不依赖于Linq,并添加了一个泛型IEnumerable<T>重载,以避免非泛型版本中值类型的装箱。[编辑:请注意,使用IEnumerable<T>并不会阻止枚举数的装箱,duck-typing也无法阻止这一点,但至少值类型集合中的元素不会分别装箱。]

代码语言:javascript
复制
using System.Collections;
using System.Collections.Generic;

public static class IsNullOrEmptyExtension
{
    public static bool IsNullOrEmpty(this IEnumerable source)
    {
        if (source != null)
        {
            foreach (object obj in source)
            {
                return false;
            }
        }
        return true;
    }

    public static bool IsNullOrEmpty<T>(this IEnumerable<T> source)
    {
        if (source != null)
        {
            foreach (T obj in source)
            {
                return false;
            }
        }
        return true;
    }
}
票数 25
EN

Stack Overflow用户

发布于 2014-11-28 23:38:42

另一种方法是获取枚举数并调用MoveNext()方法来查看是否有任何项:

代码语言:javascript
复制
if (mylist != null && mylist.GetEnumerator().MoveNext())
{
    // The list is not null or empty
}

这对IEnumerable和IEnumerable都有效。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5047349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档