2012-05-03 153 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

相關問題