如何为列表比较创建<t>函数?

时间:2016-09-09 05:43:28

标签: c# linq

public static bool CompareLists(List<Product> lstProduct1, List<Product> lstProduct2, List<DuplicateExpression> DuplicateExpression)
    {
        string[] Fields = DuplicateExpression.Select(x => x.ExpressionName).ToArray();
        //var JoinExp = lstProduct1.Join(lstProduct2, new[] { "ProductName", "ProductCode" });
        var JoinExp = lstProduct1.Join(lstProduct2, Fields);
        bool IsSuccess = CompareTwoLists(lstProduct1, lstProduct2, (listProductx1, listProductx2) => JoinExp.Any());

        return IsSuccess;
    }

如何将上述功能转换为<T>功能?实际上这是一个List比较函数。

1 个答案:

答案 0 :(得分:1)

SequenceEqual解决了您的问题。

new[] { "A", "B" }.SequenceEqual(new[] { "A", "B" }).Should().BeTrue();

这是源代码。

public static bool SequenceEqual<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer)
{
    if (comparer == null) comparer = EqualityComparer<TSource>.Default;
    if (first == null) throw Error.ArgumentNull("first");
    if (second == null) throw Error.ArgumentNull("second");
    using (IEnumerator<TSource> e1 = first.GetEnumerator())
    using (IEnumerator<TSource> e2 = second.GetEnumerator())
    {
        while (e1.MoveNext())
        {
            if (!(e2.MoveNext() && comparer.Equals(e1.Current, e2.Current)))
                return false;
        }
        if (e2.MoveNext())
            return false;
    }
    return true;
}

在您的情况下,您可以选择将IEnumerable<TSource>替换为IList<TSource>,或者甚至List<TSource>,最好是abstraction的最高级别。