You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码效率优化及反编译结果差异问题咨询

问题解答

为什么反编译代码和原代码结构不同?

C#编译器不会把链式三元表达式保留为特殊的IL指令,而是将其编译成与嵌套if-else完全等价的条件分支逻辑。反编译器(如ILSpy、dnSpy)在还原代码时,通常会优先选择更通用的嵌套if-else结构来呈现这种分支逻辑,而非链式三元——这只是反编译器的代码还原策略差异,两种写法的执行逻辑和效率完全一致,你的测试通过也验证了这一点。

更高效的写法推荐

这里的“高效”兼顾执行效率和代码可维护性,推荐使用字典映射操作符与对应运算类型的写法,既简化分支逻辑,又提升扩展性:

实现示例

// 提前定义操作符到运算类型构造逻辑的映射
private static readonly Dictionary<string, Func<INumber, INumber, INumber>> _operationHandlers = new()
{
    { "-", (left, right) => new Subtraction(left, right) },
    { "+", (left, right) => new Addition(left, right) },
    { "/", (left, right) => new Division(left, right) },
    { "*", (left, right) => new Multiplication(left, right) }
};

public INumber Level1()
{
    INumber number = Level2();
    Next();

    // 通过字典查找直接匹配对应的操作逻辑
    if (_operationHandlers.TryGetValue(txt, out var handler))
    {
        return handler(number, Level1());
    }

    return number;
}

优势说明

  1. 可维护性提升:新增运算类型时,只需在字典中添加一行映射,无需修改条件分支代码;
  2. 可读性更强:所有支持的操作符及其对应逻辑一目了然,避免冗长的链式三元或嵌套if;
  3. 执行效率优化:字典查找为O(1)时间复杂度,当操作符数量增多时,比线性判断的链式三元/嵌套if效率更高(操作符数量较少时差异可忽略)。

如果txt是char类型,只需将字典的键类型改为char即可,逻辑完全一致。

内容的提问来源于stack exchange,提问作者user24296292

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 00:31:11