首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >en IEnumerable<T>与IEnumerable<IEnumerable<T>>的有效比较

en IEnumerable<T>与IEnumerable<IEnumerable<T>>的有效比较
EN

Stack Overflow用户
提问于 2012-05-03 16:53:51
回答 1查看 148关注 0票数 0

我有一个类的IEnumerable集合和第二个IEnumerable集合,其中包含一个返回相同类的函数。例如:

代码语言:javascript
复制
IEnumerable<MyClass1> list1;
IEnumerable<MyClass2> list2;

MyClass2包含MyClass1的内部集合,其功能如下:

代码语言:javascript
复制
Public MyClass2
{
    private IEnumerable<MyClass1> internalCollection;

    public IEnumerable<MyClass1> ReturnDuplicates(IEnumerable<MyClass1> duplicates
    {                        
        return internalCollection.Where(l => duplicates.Select(d => d.ID).ToString() == l.ID.ToString());
    }
    ...
}

然后我有一个函数来比较这两者:

代码语言:javascript
复制
// Function to return a flag indicating if the two lists contain 
// any of the same data
public bool CheckDuplicates(IEnumerable<MyClass1> col1, IEnumerable<MyClass2> col2)
{
    // The following check is wrong as it returns null
    IEnumerable<MyClass1> dupe =                
            col2.Where(w => w.ReturnDuplicates(col1).Count() != 0)
                        as IEnumerable<MyClass1>;

    return (dupe.Count() != 0);
}

CheckDuplicates()中的上述语句返回null。但是,在“即时”窗口中:

代码语言:javascript
复制
col2.First().ReturnDuplicates(col1).Count()

返回1

我想我知道问题的原因了--语句返回

代码语言:javascript
复制
IEnumerable<MyClass2>

那么,这种检查在没有foreach语句的情况下是可能的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-03 17:02:32

你为什么要演IEnumerable<MyClass1>?复制的类型似乎是IEnumerable<MyClass2>。这就是为什么你的变量是null

您可以尝试以下代码:

代码语言:javascript
复制
return col2.Any(w => w.ReturnDuplicates(col1).Any())

.Any()避免了.Count()所需的完整枚举。一旦找到匹配项,它将立即停止枚举。

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

https://stackoverflow.com/questions/10428080

复制
相关文章

相似问题

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