在这个C#代码中是否有类型检查的替代方法?

时间:2009-03-11 16:02:53

标签: c#

我目前正在研究节点的树结构,其中每个节点应该能够判断它是否等同于另一个节点。每个节点类都是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);
    }
}

我觉得这可能不是最佳解决方案,因为它涉及铸造。有更优雅的方式吗?

4 个答案:

答案 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;
}