假设我有一堂课
XYNode { protected int mX; protected int mY; }
和一个队列
Queue<XyNode> testQueue = new Queue<XYNode>();
我想检查具有该特定x和y坐标的节点是否已在队列中.
以下显然不起作用:
testQueue.Contains(new XYNode(testX,testY))
因为即使具有这些坐标的节点在队列中,我们也会针对不同的XYNode对象进行测试,因此它总是返回false.
什么是正确的解决方案?
解决方法
最简单的方法是重写Equals,以便一个XYNode知道它是否等于另一个XYNode.您应该同时覆盖GetHashCode(),并且还可能实现IEquatable< XYNode>允许强类型的相等比较.
或者,您可以编写IEqualityComparer< XYNode>实现比较任何两个节点并返回它们是否相同 – 然后将其传递给对Enumerable中定义的appropriate overload of the Contains
extension method的调用(假设您使用的是.NET 3.5).
还需要考虑的事项:
>您可以使用私有字段而不是受保护字段吗?>你的班级可以密封吗?>你的班级可以不变吗?>你的班级应该是一个结构吗? (判决电话……)>你应该重载==和!=运算符吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。