有几种方法可以做到这一点,具体取决于您通常希望如何使用您的MyObject
类的实例。
最简单的一种是实现IEquatable<T>
接口以便仅比较protocol
字段:
public class MyObject : IEquatable<MyObject>
{
public sealed override bool Equals(object other)
{
return Equals(other as MyObject);
}
public bool Equals(MyObject other)
{
if (other == null) {
return false;
} else {
return this.protocol == other.protocol;
}
}
public override int GetHashCode()
{
return protocol.GetHashCode();
}
}
然后,您可以Distinct
在将您的可枚举转换为列表之前调用。
或者,您可以使用Distinct
采用IEqualityComparer
.
相等比较器必须是根据您的标准确定相等的对象,在问题中描述的情况下,通过查看protocol
字段:
public class MyObjectEqualityComparer : IEqualityComparer<MyObject>
{
public bool Equals(MyObject x, MyObject y)
{
if (x == null) {
return y == null;
} else {
if (y == null) {
return false;
} else {
return x.protocol == y.protocol;
}
}
}
public int GetHashCode(MyObject obj)
{
if (obj == null) {
throw new ArgumentNullException("obj");
}
return obj.protocol.GetHashCode();
}
}