【发布时间】:2015-07-01 06:13:37
【问题描述】:
我有以下简单的对象:
public class Net : IEqualityComparer<Net>
{
public string Name { get; private set; }
public int Id { get; set; }
private Gate _inGate;
private Gate _outGate;
private NetValue _value = NetValue.NotSet;
private bool _isMiddleNet;
//constructor and stuff!!!.....
//Equality comparer
public bool Equals(Net x, Net y)
{
return (x.Id == y.Id && x.Name == y.Name);
}
public int GetHashCode(Net obj)
{
return obj.Id.GetHashCode() ^ obj.Name.GetHashCode();
}
public override int GetHashCode()
{
return 13 * Id.GetHashCode() + 7 * Name.GetHashCode();
}
所以基本上我有兴趣说这个对象的 2 个实例是相等的,当且仅当它们的 Id 和 Name 成员相等时...
但是在另一个班级的其他地方我必须List<Net>,我想对这些列表进行区分:
inputNetsA = inputNetsA.Distinct().ToList();
inputNetsB = inputNetsB.Distinct().ToList();
但这从来都不起作用!我做错了什么?
【问题讨论】:
-
Side q:为什么 GetHashCode 的 2 个实现在您的示例中如此不同?
object.Equals的实现在哪里?有关信息,请参阅stackoverflow.com/questions/4095395/… 和链接问题...
标签: c# .net linq iequalitycomparer