一尘不染

使用Case / Switch和GetType确定对象[重复]

c#

这个问题已经在这里有了答案

7年前关闭。

可能的重复:
C#-是否有比“打开类型”更好的替代方法?

如果要switch对某种类型的对象进行操作,最好的方法是什么?

程式码片段

private int GetNodeType(NodeDTO node)
{
    switch (node.GetType())
    { 
        case typeof(CasusNodeDTO):
            return 1;
        case typeof(BucketNodeDTO):
            return 3;
        case typeof(BranchNodeDTO):
            return 0;
        case typeof(LeafNodeDTO):
            return 2;
        default:
            return -1;
    }
}

我知道这行不通,但是我想知道您如何解决这个问题。if/else在这种情况下,声明是否合适?

还是使用开关并添加.ToString()到类型?


阅读 431

收藏
2020-05-19

共1个答案

一尘不染

如果 确实 需要处理switch对象类型,则可以使用.ToString()。但是,我会不惜一切代价避免这样IDictionary<Type, int>做:它将做得更好,访问者可能是一个过大的杀手,但是否则它仍然是一个完美的解决方案。

2020-05-19