C# 不支持打开对象的类型。 模拟这个的最佳模式是什么:
switch (typeof(MyObj)) case Type1: case Type2: case Type3:
见回答;此功能现在存在于 C# 中
更新:这在 C# 7.0 中通过模式匹配得到了修复
switch (MyObj) case Type1 t1: case Type2 t2: case Type3 t3:
老答案:
这是 C# 游戏中的一个漏洞,还没有灵丹妙药。
你应该用谷歌搜索“访客模式”,但这对你来说可能有点重,但你仍然应该知道一些事情。
这是使用 Linq 对此事的另一种看法:http: //community.bartdesmet.net/blogs/bart/archive/2008/03/30/a-functional-c-type-switch.aspx
否则这些方面的东西可能会有所帮助
// nasty.. switch(MyObj.GetType().ToString()){ case "Type1": etc } // clumsy... if myObj is Type1 then if myObj is Type2 then
等等
我通常使用类型和委托的字典。
var @switch = new Dictionary<Type, Action> { { typeof(Type1), () => ... }, { typeof(Type2), () => ... }, { typeof(Type3), () => ... }, }; @switch[typeof(MyType)]();
它不太灵活,因为您不能通过案例,继续等。但无论如何我很少这样做。