我应该创建类还是创建if?

时间:2012-12-04 01:29:56

标签: c# .net windows coding-style

我有一个情况:

我需要和班级做点什么。

什么应该更有效率,用IFs修改方法或为每个动作创建方法?

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

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


        }

这个命令会有50多个。 在执行的性能和可执行的大小方面,哪个更好?

3 个答案:

答案 0 :(得分: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块也意味着您可以获得更紧凑的代码。

答案 1 :(得分:3)

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

在C#中,方法应该是任务的封装。你在这里有一个公尺船任务,每个任务无关。这应该不是一个单一的方法。想象一下,将来尝试维护这种方法。想象一下,尝试调试它,想知道你在方法中的每个位被调用。

如果你把它分开,你的生活会更容易,但表现可能没什么区别。

答案 2 :(得分:1)

虽然单独的方法几乎肯定会在性能方面更好,但您不太可能注意到差异。但是,使用单独的方法肯定会大大提高可读性,这一点非常重要。