我正在编写一个解析器,该解析器根据某些值调用某些函数。
我可以使用以下简单的开关来实现此逻辑:
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/