我正在使用 .net 2.0 和 c#,并且我已经在我的类中实现了 IEquatible 接口,如下所示:-
public MyClass() : IEquatable<MyClass>
{
Guid m_id = Guid.NewGuid();
public Guid Id
{
get
{
return m_id;
}
}
#region IEquatable<MyClass> Members
public bool Equals(MyClass other)
{
if (this.Id == other.Id)
{
return true;
}
else
{
return false;
}
}
#endregion
}
这是不好的编程习惯吗?我读到我还需要实现 Object.Equals 和 Object.GetHashCode ,但我不确定为什么。
我希望能够检查 MyClass 的实例是否已包含在 MyClass 类型的通用列表中。为什么框架只建议您仅实现 Equals?
任何帮助将不胜感激。
您可以使用 LINQ 检查您的列表是否包含使用自定义谓词作为条件的项目。在这种情况下你不需要覆盖Equals
也不实施IEquatable
:
// check if the list contains an item with a specific ID
bool found = someList.Any(item => item.ID == someId);
压倒一切Equals
(with GetHashCode
)并实施IEquatable
如果您需要将物品存储在Dictionary
or a Hashtable
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)