Possible Duplicate:
C# - Is there a better alternative than this to ‘switch on type’?

如果你想在一类物体上点击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;
    }
}

我知道这样不行,但我想知道你怎么解决这个问题.

或者您是否使用switch 并在类型中添加.ToString()

推荐答案

如果Ireally必须在对象类型上使用switch,我会使用.ToString().然而,我会不惜一切代价避免它:IDictionary<Type, int>会做得更好,visitor可能有些矫枉过正,但除此之外,它仍然是一个完美的解决方案.

.net相关问答推荐

将Visual Studio更新到v17.9.3后,IDE关闭,dotnet.exe命令报告致命错误.内部CLR错误.(0x80131506)

创建仅包含msBuild.Target的Nuget包

如何按需计算一个值并将该值缓存在FP/F#中?

System.IO.Directory.Exists 在 LINQ 语句中失败,但在 foreach 循环中没有

如何在 ASP.NET Core MVC 中读取操作方法的属性?

我应该创建一个 DateRange 对象吗?

代理、包装器或外观类之间有什么区别

Unity 2.0:如何使用 Resolve 和 ResolverOverride?

在 WinForms 应用程序中查找焦点控件的首选方法是什么?

编译错误:显式实现接口时修饰符 'public' 对此项目无效

C# 方法可以定义为采用的最大参数数是多少?

C# 相当于 Java 的 <?在泛型中扩展 Base>

如何结合 ||条件语句中的运算符

.NET 事件 - 什么是对象发送者和 EventArgs e?

单元测试 C# 保护方法

更改 SqlConnection 超时

Guid.Parse() 或 new Guid() - 有什么区别?

如何在不使用 3rd 方库的情况下登录 C#?

将控制台输出镜像到文件

可以从 C# 调用 C++ 代码吗?