我有2个列表。我想使用LINQ来比较每个元素与这两个列表的每个元素(而不是使用一个嵌套循环)。但是,Contains不能满足我的需求,因为我需要进行自定义比较。我会想象一个自定义比较器是我需要但不是100%确定。Linq自定义比较器包含?
我不认为这应该太困难,但不能确定我需要的工具。这两个列表都包含不同类型的不同类型的对象。
更新:
对不起,如果我不清楚。我有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 2010-07-27 22:13:24
重写GetHashCode(),以便不同的项返回不同的哈希码,并且'相同'项返回相同的哈希码。然后包含将工作,因为它应该(我认为) – PostMan 2010-07-27 22:16:36
@PostMan - 你不应该为GetHashCode()返回不同的值为不同的项目,只是它会始终返回相同的值,被认为是相等的项目。 – 2010-07-27 22:40:21