我有一个类Column
public class Column
{
public int Id { get; private set; }
public string Name { get; private set; }
public EPersonalCharacteristicType Type { get; private set; }
public Column MainColumn { get; private set; }
}
我在另一个类中有以下字段:
Dictionary<Column, string> dictionary
在执行过程中,我遇到了这个
字典(dictionary)
的奇怪行为。当我输入时,它表现得很奇怪。dictionary.ContainsKey(dictionary.Keys.ToList()[1])
我得到了 false
。
这怎么可能呢?
更新
我的 Column
类有 GetHashCode 或 Equals 函数。以下是它们的实现:
public bool Equals(Column other)
{
if (ReferenceEquals(null, other)) return false;
if (ReferenceEquals(this, other)) return true;
return other.Id == Id && Equals(other.Name, Name) && Equals(other.Type, Type) && Equals(other.MainColumn, MainColumn) && Equals(other.childColumns, childColumns);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != typeof (Column)) return false;
return Equals((Column) obj);
}
public override int GetHashCode()
{
unchecked
{
int result = Id;
result = (result*397) ^ (Name != null ? Name.GetHashCode() : 0);
result = (result*397) ^ Type.GetHashCode();
result = (result*397) ^ (MainColumn != null ? MainColumn.GetHashCode() : 0);
result = (result*397) ^ (childColumns != null ? childColumns.GetHashCode() : 0);
return result;
}
}
public static bool operator ==(Column left, Column right)
{
return Equals(left, right);
}
public static bool operator !=(Column left, Column right)
{
return !Equals(left, right);
}
Column
是否覆盖了GetHashCode
和/或Equals
方法? - Jonfalse
而不是抛出异常,例如,字典中肯定至少包含 2 个条目([1]
表示列表中的第二个键)? - Kieren JohnstoneColumn
上重写了Equals
和/或GetHashCode
?如果是,你很可能重写不正确,导致了这个问题。 - CodesInChaos