C# 使用IEnumerable初始化的哈希集包含重复的元素
我希望能够使用由C# 使用IEnumerable初始化的哈希集包含重复的元素,c#,hashset,C#,Hashset,我希望能够使用由IEnumerable自定义对象集合构建的HashSet,而无需重复。我的自定义对象包含id和一些其他属性,这些属性对于这个问题并不重要。我对一个数据库进行查询,该数据库返回一个IEnumerable,我稍后使用该数据库用以下代码构造一个HashSet: HashSet<Question> results = new HashSet<Question>(new QuestionComparer()); var result = await query.Ex
IEnumerable
自定义对象集合构建的HashSet
,而无需重复。我的自定义对象包含id
和一些其他属性,这些属性对于这个问题并不重要。我对一个数据库进行查询,该数据库返回一个IEnumerable
,我稍后使用该数据库用以下代码构造一个HashSet
:
HashSet<Question> results = new HashSet<Question>(new QuestionComparer());
var result = await query.ExecuteNextAsync<Question>();
results.UnionWith(result);
我还尝试在Question
类中重写Equals
和GetHashCode
方法,但没有成功。我考虑过在集合中循环并删除重复项,但似乎这可能会成为性能问题
编辑:我正在使用的Azure DocumentDB显然目前不支持“独特”类型的查询。您应该重写现有
问题
类的方法,而不是编写公共类问题比较器
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" });
HashSet qh=newhashset();
添加(新问题(){ID=“1”});
添加(新问题(){ID=“1”})//不会被添加
添加(新问题(){ID=“2”});
什么类型的Id
?它是字符串
请提供使用结果的原因。UnionWith(结果)不仅是构造函数:newhashset(result,newquestioncomparer())
。结果应该是一样的,但我找到了你的方法confusing@Luki:您是否使用调试器检查了GetHashCode
和Equals
中使用重复的id
时发生的情况(您可以创建一个条件断点).我现在又试了一次,似乎我以前犯过一些愚蠢的错误,因为它现在运行得非常好。。。我真的不知道以前出了什么问题。因为你是第一个接受这个答案。
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" });