У меня есть метод расширения, чтобы судить, существует ли элемент в массиве / списке.
Я столкнулся с проблемой, что как оценить равенство между двумя элементами, если 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.
Вы можете мне помочь?