Как сравнить указанный тип элемента массива? - PullRequest
1 голос
/ 30 марта 2020

У меня есть метод расширения, чтобы судить, существует ли элемент в массиве / списке.

Я столкнулся с проблемой, что как оценить равенство между двумя элементами, если T является массивом / списком?

Предположим, что [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.

Вы можете мне помочь?

...