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