我正在编写一个解析器,该解析器根据某些值调用某些函数。

我可以使用以下简单的开关来实现此逻辑:

switch(some_val)
{
    case 0:
        func0();
        break;
    case 1:
        func1();
        break;
}

或带有代表和这样的字典:
delegate void some_delegate();
Dictionary<int, some_delegate> some_dictionary = new Dictionary<int, some_delegate>();
some_dictionary[0] = func0;
some_dictionary[1] = func1;

some_dictionary[some_value].Invoke();

这两种方法是否等效,哪个更可取?

最佳答案

在访问方面,它们是相同的:两者都只是检查该特定值是否具有相应的结果。但是,如果您尝试访问不存在的 key ,则Dictionary将抛出越界异常。

选择应主要基于可重用性。如果只需要在某一点上创建此分支逻辑,则使用切换条件可能比存储变量更有意义。如果您需要在不同的位置重复访问它,则可以使用词典来避免再次重复粘贴开关语句。

关于c# - 带委托(delegate)或切换的字典?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2896715/

10-11 04:06