codeDom中的switch语句(跳转表样式)

时间:2012-12-05 20:47:23

标签: c# switch-statement codedom

我知道CodeDom中没有switch语句,以及编译器如何处理switch语句。

因此,出于性能原因,当存在许多案例时,我不想使用If-else
Why the switch statement and not if-else?

是否可以生成代码来模拟给定案例列表的Jump表。

switch(value) {
    case 0: return Method0();
    case 1: return Method1();
    case 4; return Method4();
}

会产生:

    private delegate object Method();

    Method[] _jumpTable = new Method[] { Method0, Method1, null, null, Method4 };

    private object GetValue(int value)
    {
        if (value < 0 || value > 4) 
            return null;
        return _jumpTable[value]();
    }

如果序列中有漏洞或列表稀疏,分析案例列表并生成数组的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您可能需要查看The Roslyn Project代码anaylsis。如果表很大并且特别稀疏,则if / else可能更好(给定现代CPU缓存)。 Roslyn应该允许您遍历DOM并获取可以对其进行排序的案例值(可能在单个linq stmt中)。我相信你的意思是在上面的开关中“休息”。如果你实现这样的东西,我会非常仔细地测试它,以确保它确实提高了性能。