小编典典

C#打开类型

all

C# 不支持打开对象的类型。
模拟这个的最佳模式是什么:

switch (typeof(MyObj))
    case Type1:
    case Type2:
    case Type3:

阅读 72

收藏
2022-05-31

共1个答案

小编典典

见回答;此功能现在存在于 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)]();

它不太灵活,因为您不能通过案例,继续等。但无论如何我很少这样做。

2022-05-31