加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 检查通用IEnumerable是否为空

发布时间:2020-12-15 19:57:49 所属栏目:百科 来源:网络整理
导读:假设我有一个可以是IEnumerable T类型的对象.我想编写一个方法,如果对象的类型为IEnumerable T,则为null,并且不为空,则返回true. 这是我到目前为止所得到的: public bool IsNullOrEmpty(object obj){ if (obj != null) { if (obj is IEnumerableobject) { r
假设我有一个可以是IEnumerable< T>类型的对象.我想编写一个方法,如果对象的类型为IEnumerable< T>,则为null,并且不为空,则返回true.

这是我到目前为止所得到的:

public bool IsNullOrEmpty(object obj)
{
    if (obj != null)
    {
        if (obj is IEnumerable<object>)
        {
            return (obj as IEnumerable<object>).Any();
        }
    }
    return false;
}

如果我传入一个类型为List< string>的对象,但是如果我传入一个类型为List< int>的对象,则无效.它失败了因为因为obj是IEnumerable< object>返回false.

知道如何让所有通用的IEnumerables工作吗?

解决方法

由于类型可能是未知的,您可以尝试检查IEnumerable接口并在枚举器上使用MoveNext().

编辑:我更新了方法名称.由于原始问题代码检查集合中是否有项目,因此现在使用逻辑更有意义.

public bool IsNotNullOrEmpty(object enumerable)
{
    if (enumerable != null)
    {
        if (enumerable is IEnumerable)
        {
            using(var enumerator = ((IEnumerable)enumerable).GetEnumerator())
                return enumerator.MoveNext();
        }
    }
    return false;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读