这似乎是一个菜鸟问题,但我找不到一个具体的答案。
我有这样一门课:
public class Quotes{
public string symbol;
public string extension
}我用的是这个:
HashSet<Quotes> values = new HashSet<Quotes>();但是,我可以多次添加相同的报价对象。例如,我的Quotes对象可能具有等于'A‘的'symbol’和等于'=n‘的'extension’,并且此Quotes对象在HashSet中多次出现(通过调试模式查看哈希集)。我在打电话的时候就想过
values.Add(new Quotes(symb, ext));使用相同的symb和ext,将返回'false‘,并且不会添加元素。我有一种感觉,当HashSet添加一个新对象时,它与比较Quotes对象有关。任何帮助都将不胜感激!
发布于 2012-01-06 02:19:12
我曾想过,当使用相同的符号和ext调用
values.Add(new Quotes(symb, ext));时,会返回'false‘,并且不会添加元素。
事实并非如此。
HashSet将使用GetHashCode和Equals来确定对象的相等性。现在,因为你没有覆盖Quotes中的这些方法,所以将使用默认的System.Object的引用相等。每次你添加一个新的Quote,它都是一个唯一的对象实例,所以HashSet会把它看作一个唯一的对象。
如果您覆盖Object.Equals和Object.GetHashCode,它将按照您的预期工作。
https://stackoverflow.com/questions/8747577
复制相似问题