【发布时间】:2011-06-03 09:45:28
【问题描述】:
假设我们有 2 个集合,至少 IEnumerable 可以启动 Linq(也假设 .net 4.0):
List<T1> list1;
List<T2> list2;
我可以定义 T1 和 T2 类型的对象之间的相等性。
验证 2 个列表是否相等(元素顺序不相关)的最佳方法是什么(即首选 .net 接口和 Linq)。
如果我知道对象 T1 和 T2 有一个 ID,我该如何优化这个问题
T1 和 T2 的前例:
class Device
{
string Id;
string Name;
}
class DeviceInfo
{
string Identifier;
string FriendlyName;
DateTime CreateDate;
}
后期编辑:
解决方案应该涉及我编写的某种相等比较器,并且足够通用。在某些情况下,两个对象具有相同的 Id 但名称不同,那么比较应该会失败。例如:
static bool AreEqual(Device device, DeviceInfo deviceInfo)
{
return device.Id == deviceInfo.Identifier &&
device.Name == deviceInfo.FriendlyName;
}
【问题讨论】:
-
IEqualityComparer应该适用于相同类型的对象。你可以让它接受两个object参数并尝试一些强制转换等,但不要:使用正确的工具来完成这项工作。
标签: .net linq interface equality