C# SomeObjects的HashSet,包含带int参数的函数
假设我们有一个包含许多字段的类SomeObject,并在HashSet中存储实例。 对于HashSet comprison,我们只需要一个字段:int ID,因此我们重写了GetHashCode()和Equals()方法 现在我的问题是:我们是否可以使用hashSet.Contains(someIntVariable)而不是创建SomeObject类型的全新对象? 我的意思是,如果只有int字段是重要的,我们可以使用给定int参数的Contains函数吗C# SomeObjects的HashSet,包含带int参数的函数,c#,contains,hashset,C#,Contains,Hashset,假设我们有一个包含许多字段的类SomeObject,并在HashSet中存储实例。 对于HashSet comprison,我们只需要一个字段:int ID,因此我们重写了GetHashCode()和Equals()方法 现在我的问题是:我们是否可以使用hashSet.Contains(someIntVariable)而不是创建SomeObject类型的全新对象? 我的意思是,如果只有int字段是重要的,我们可以使用给定int参数的Contains函数吗 我需要它来检查对象是否已经存在,并且不想
我需要它来检查对象是否已经存在,并且不想创建整个示例对象。
HashSet
不幸的是,它无法使用不同类型的对象进行搜索并获取存储的内容。这种能力理论上是存在的,也许你可以在网上找到一个这样的图书馆
最佳解决方法:
创建一个单独的键结构(例如,MyKey
)并使用字典
。这样,您就可以创建关键点而无需创建对象
或者,您可以创建封装键或整个对象的包装器结构。您可以更便宜地实例化该结构并将其传递给
HashSet
。我发现这比第一个想法更复杂。为什么不将ID存储在哈希集中呢?然后呢?我仍然需要对象,因此我必须创建两个哈希集,一个用于ID,另一个用于对象。您实际在使用该哈希集做什么?为什么要使用HashSet
而不是Dictionary
?添加实例,并按ID搜索它们(我们不能说关于ID的任何内容,它可以是1或234234)