У меня есть 2 списка. Я хочу сравнить каждый элемент с каждым элементом для обоих списков, используя LINQ (в отличие от использования вложенного цикла). Но Содержит не отвечает моим потребностям, потому что мне нужно сделать индивидуальное сравнение. Я бы предположил, что пользовательский сопоставитель - это то, что мне нужно, но не на 100% уверен.Linq пользовательский компаратор для содержит?
Я не думаю, что это должно быть слишком сложно, но не совсем точно, что мне нужно для этого. В двух списках содержатся различные и разные типы объектов.
Update:
К сожалению, если бы я не был ясен. У меня есть 2 списка (или перечислимых) я мог бы сделать что-то вроде этого:
foreach(item i in list1)
foreach(otherItemType in List2)
{
if (CompareItem(x)) do something;
}
То, что я хочу сделать, это что-то вроде этого:
var matches = myList1.Where(t => myList2.Something(t))
Где-то есть собственный компаратор, возможно, я могу переопределить сравнение сравнений? Я мог бы использовать .Contains
, но мне нужно сделать свою собственную логику для сравнения.
Обновление: Я подумал об использовании IEqualityComparer
, но он настроен на использование типов T, T и T, Y. Могут быть некоторые общие ограничения, которые я мог бы использовать для решения этой проблемы. Я чувствовал, что это должно быть легко/просто.
Не могли бы вы объяснить ваши требования в дальнейшем, или предоставить некоторые примеры данных и ожидаемых результатов? – LukeH
Переопределить GetHashCode(), чтобы разные элементы возвращали разные хэш-коды, а «те же» элементы возвращают один и тот же хэш-код. Затем будет работать так, как должно (я думаю) – PostMan
@PostMan - вы никогда не должны берете на GetHashCode() возвращающие разные значения для разных элементов, только чтобы он всегда возвращал одинаковое значение для элементов, которые считаются равными. –