我有一个类的IEnumerable集合和第二个IEnumerable集合,其中包含一个返回相同类的函数。例如:
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语句的情况下是可能的吗?
发布于 2012-05-03 17:02:32
你为什么要演IEnumerable<MyClass1>?复制的类型似乎是IEnumerable<MyClass2>。这就是为什么你的变量是null。
您可以尝试以下代码:
return col2.Any(w => w.ReturnDuplicates(col1).Any()).Any()避免了.Count()所需的完整枚举。一旦找到匹配项,它将立即停止枚举。
https://stackoverflow.com/questions/10428080
复制相似问题