0

我有一个情况:

我需要在课堂上做点什么。

什么应该更有效,以这种方式修改方法,使用 IF 或为每个动作创建方法?

public value Value(int command)
        {
            if (command == 1)
            {
                DoSomething1();
            }

            if (command == 2)
            {
                DoSomething2();
            }
            else
            {
                return empty();
            }


        }

将会有 50 多个这样的命令。在执行性能和可执行文件的大小方面有什么更好的?

4

3 回答 3

4

在高层次上,您似乎正在尝试实现某种动态调度系统?或者您只是想在没有任何多态性的情况下执行指定的操作?很难说。

无论如何,根据您给出的示例, switch 块将是性能最高的,因为 JIT 编译器将其转换为有效的哈希表查找而不是一系列比较,所以只需执行以下操作:

enum Command { // observe how I use an enum instead "magic" integers
    DoSomethingX = 1,
    DoSomethingY = 2
}

public Value GetValue(Command command) {
    switch(command) {
        case Command.DoSomethingX: return DoSomethingX();
        case Command.DoSomethingY: return DoSomethingY();
        default: return GetEmpty();
    }
}

我还注意到该switch块也意味着您可以获得更紧凑的代码。

于 2012-12-04T01:35:23.010 回答
3

这不是一个性能问题,而是一个范式问题。

在 C# 中,方法应该是任务的封装。您在这里拥有的是一大堆任务,每个任务都不相关。这不应该是单一的方法。想象一下,将来尝试保持这种方法。想象一下尝试调试它,想知道在调用每个位时您在方法中的哪个位置。

如果你把它分开,你的生活会容易得多,尽管性能可能没有任何区别。

于 2012-12-04T01:35:34.710 回答
1

尽管单独的方法在性能方面几乎肯定会更好,但您不太可能注意到差异。但是,拥有单独的方法肯定会大大提高可读性,这一点更为重要。

于 2012-12-04T01:36:59.460 回答