我目前正在研究节点的树结构,其中每个节点应该能够判断它是否等同于另一个节点。每个节点类都是QueryNode的子类。 为了检查等价性,节点比较它们是否属于同一个子类并且具有相同的成员值(当然还有更多的事情涉及,但这是让我烦恼的部分):
class VersionNode : QueryNode
{
VersionModifier m_versionModifier;
internal VersionModifier VersionModifier
{ get { return this.m_versionModifier; } }
// ...
protected override bool AreMembersEquivalent(QueryNode other)
{
VersionNode otherNodeAsVersionNode = other as VersionNode;
if (otherNodeAsVersionNode == null)
return false;
else
return (this.m_versionModifier == otherNodeAsVersionNode.VersionModifier);
}
}
我觉得这可能不是最佳解决方案,因为它涉及铸造。有更优雅的方式吗?
答案 0 :(得分:2)
简短的回答是否定的。铸造(甚至在一定程度上拆箱)并不昂贵。
答案 1 :(得分:1)
你可以这样做:
protected override bool AreMembersEquivalent(QueryNode other)
{
if (!(other is VersionNode))
return false;
...
}
答案 2 :(得分:0)
我很确定这个奇怪的演员不会伤到你。你在做什么,物理建模?
答案 3 :(得分:0)
它不是更优雅,但它可能更明确:
protected override bool AreMembersEquivalent(QueryNode other)
{
if (GetType() == other.GetType())
{
return (VersionModifier == other.VersionModifier);
}
return false;
}