将 en IEnumerable 与 IEnumerable> 有效地进行比较

本文关键字:IEnumerable 比较 en 有效地 | 更新日期: 2023-09-27 18:33:05

我有一个 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语句的情况下,这种检查是可能的吗?

将 en IEnumerable<T> 与 IEnumerable<IEnumerable<T>> 有效地进行比较

你为什么要选IEnumerable<MyClass1>?欺骗的类型似乎IEnumerable<MyClass2>.这就是为什么你的变量是 null .

您可以尝试以下代码:

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

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