首页 > 解决方案 > 如何比较数组的指定类型元素?

问题描述

我有一个扩展方法来判断一个项目是否存在于数组/列表中。

遇到一个问题,如果T是Array/List,如何判断两个元素是否相等?

假设[1, 2][2, 1]是两个不同的元素。这是我的方法:

public static bool ContainsElement<T>(this IEnumerable<T> list, T target, out T matched)
{
    matched = default(T);

    if (typeof(T).IsCollection())
    {
        var targetElements = (target as IEnumerable).Cast<object>();
        foreach (var element in list)
        {
            var innerElements = (element as IEnumerable).Cast<object>();
            if (targetElements.Count() == innerElements.Count())
            {
                bool findDifference = false;
                for (int i = 0; i < targetElements.Count(); i++)
                {
                    if (/* How to compare the two element */)
                    {
                        findDifference = true;
                    }
                }

                if (!findDifference)
                {
                    matched = element;
                    return true;
                }
            }
            else
            {
                return false;
            }
        }
        return false;
    }
    else
    {
        foreach (var element in list)
        {
            if (EqualityComparer<T>.Default.Equals(element, target))
            {
                matched = element;
                return true;
            }
        }

        return false;
    }
}

我找不到知道如何为数组EqualityComparer<>元素创建一个的T方法。我可以通过 typeof(T).GetElementType() 获取元素的类型,但是比较这两个元素似乎没有用。

顺便说一句,IsCollection方法是我检查 T 是数组还是从 IEnumerable 分配的扩展方法。

你能帮助我吗?

标签: arrayscomparecontainsequality

解决方案


推荐阅读