Sam*_*yan 22 c# delegates dictionary switch-statement
我正在编写一个解析器,它调用一些依赖于某些值的函数.
我可以用这样的简单开关实现这个逻辑:
switch(some_val)
{
case 0:
func0();
break;
case 1:
func1();
break;
}
Run Code Online (Sandbox Code Playgroud)
或者与代表和这样的字典:
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();
Run Code Online (Sandbox Code Playgroud)
这两种方法是否相同,哪种方法更受欢迎?
小智 11
我非常喜欢字典选择,因为使用初始化程序,它可以更紧凑和可读:
var actions = new Dictionary<int, Action>
{
{1, () => Console.WriteLine("One!")},
{2, () => Console.WriteLine("Two!")}
}
Run Code Online (Sandbox Code Playgroud)
此外,你有更多的灵活性; 您可以以编程方式添加条件和操作,这通常很方便,具体取决于您正在执行的操作.
在访问方面,它们是相同的:只检查该特定值是否具有相应的结果.但是,如果您尝试访问不存在的键,则Dictionary会抛出越界异常.
选择应主要是可重用性.如果您只需要在一个点上创建这个分支逻辑,那么使用switch-case可能比存储变量更有意义.如果需要在不同的点重复访问它,那么使用Dictionary来避免重复粘贴switch语句.