我正在使用 distinct 表示
Returns distinct elements from a sequence by using the default equality comparer to compare values.
但是当我运行这段代码时,我得到了多个相同的 id
var ls = ls2.Distinct().OrderByDescending(s => s.id);
foreach (var v in ls)
{
Console.WriteLine(v.id);
}
我在我的类里面实现了这些,但仍然不起作用
class Post : IComparable<Post>, IEqualityComparer<Post>, IComparer<Post>
我是这样实现的
int IComparable<Post>.CompareTo(Post other)
{
return (int)(id - other.id);
}
bool IEqualityComparer<Post>.Equals(Post x, Post y)
{
return x.id == y.id;
}
int IEqualityComparer<Post>.GetHashCode(Post obj)
{
throw new NotImplementedException();
}
int IComparer<Post>.Compare(Post x, Post y)
{
return (int)(x.id - y.id);
}
最佳答案
您应该实现 GetHashCode()
。
既然您要委托(delegate)给 -
和 ==
为什么不委托(delegate)给 id
中的适当函数。 IE。 id.Compare(other.id)
,和obj.id.GetHashCode()
,委托(delegate)Comparer进行Compare。并且还实现了IEquatable
int IComparable<Post>.CompareTo(Post other)
{
return id.Compare(other.id);
}
bool IEquatable<Post>.Equals(Post x)
{
return id == y.id;
}
bool IEqualityComparer<Post>.Equals(Post x, Post y)
{
return x.Equals(y.id);
}
int IEqualityComparer<Post>.GetHashCode(Post obj)
{
return obj.id.GetHashCode();
}
int IComparer<Post>.Compare(Post x, Post y)
{
return x.Compare(y);
}
这假设 id 是一个 int,如果不是,那么您也可以为 IEquatable 实现这些 id。
关于c# - 如何正确使用 distinct 和 compare?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8371303/