我希望能够使用从HashSet
自定义对象集合构建的IEnumerable
而不重复。我的自定义对象包含id
以及其他一些对此问题不重要的属性。我查询了一个数据库,该数据库返回IEnumerable
,我稍后用它来构造HashSet
,代码如下:
HashSet<Question> results = new HashSet<Question>(new QuestionComparer());
var result = await query.ExecuteNextAsync<Question>();
results.UnionWith(result);
问题是我不想要的result
集合中有重复的记录。
QuestionComparer
类看起来像这样:
public class QuestionComparer : IEqualityComparer<Question>
{
public bool Equals(Question x, Question y)
{
return x != null && y != null && x.Id == y.Id;
}
public int GetHashCode(Question obj)
{
return obj.Id.GetHashCode();
}
}
我还尝试覆盖Equals
类中的GetHashCode
和Question
方法,但没有成功。我考虑循环整个集合并删除重复项,但似乎它可能会成为一个性能问题...
答案 0 :(得分:-1)
您应该覆盖现有public class QuestionComparer
类
Question
public class Question
{
public string ID { get; set; }
public override int GetHashCode()
{
return ID.GetHashCode();
}
public override bool Equals(System.Object obj)
{
return (obj != null && obj is Question) ? (this.ID == ((Question)(obj)).ID) : false;
}
}
所以重复是不可能的。样品:
HashSet<Question> qh = new HashSet<Question>();
qh.Add(new Question() { ID = "1" });
qh.Add(new Question() { ID = "1" }); //will not be added
qh.Add(new Question() { ID = "2" });