c# - 带委托(delegate)或开关的字典?

标签 c# dictionary delegates switch-statement

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

我可以像这样用简单的开关实现这个逻辑:

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

或者像这样的委托(delegate)和字典:

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();    

这两种方法是否等价,哪种更好?

最佳答案

我非常喜欢字典的选择,因为有了初始化器,它可以更加紧凑和可读:

var actions = new Dictionary<int, Action>
{
  {1, () => Console.WriteLine("One!")},
  {2, () => Console.WriteLine("Two!")}
}

另外,你有更多的灵 active ;您可以通过编程方式添加条件和操作,这通常很方便,具体取决于您在做什么。

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

相关文章:

c# - 没有为 ListView 启用 ScrollViewer

c# - 两个查询,一个 View

c# - Solidworks 和 Excel C# 引用系列零件设计表

c++ - std::map::find()

ios - 如何设置不是InterfaceController的HKWorkoutSessionDelegate

UITableView 编辑/完成事件

c# - 在 ASP.NET 中使用带有 join 的 where 子句

javascript - JS : how to algorithmically highlight a diamond-shaped selection of x/y coordinates?

java - 如何从 List<Map<String, Object>> 中删除键/值对

c# - 如何从泛型类型中获取对属性访问器的委托(delegate)?