2012-05-03 154 views
0

我有一个IEnumerable类的集合,第二个IEnumerable集合包含一个返回相同的函数。例如:将IEnumerable <T>与IEnumerable比较IEnumerable <IEnumerable <T>>

IEnumerable<MyClass1> list1; 
IEnumerable<MyClass2> list2; 

MyClass2包含MyClass1的内部集合,并具有功能如下:

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()); 
    } 
    ... 
} 

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

// 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。然而,在即时窗口:

col2.First().ReturnDuplicates(col1).Count() 

返回1

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

IEnumerable<MyClass2> 

所以是这种检查可能的无foreach语句?

回答

1

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

你可以试试下面的代码:

return col2.Any(w => w.ReturnDuplicates(col1).Any()) 

.Any()避免了.Count()所需要的完整的枚举。只要找到匹配项,它就会停止枚举。

+0

(使用代码格式化消除了对'Generic '名称中不自然间距的需要) – AakashM

相关问题