我正在编写一个解析器,该解析器根据值更改UI的某些部分。我必须处理大约20个案件的价值。我想知道传统的switch语句是否像:
switch(val)
{
case 0:
f0();
break;
case 1:
f1();
break;
}
或带有这样的代表字典:
Dictionary<int, Action> dict= new Dictionary<int, Action>
{
{0, f0},
{1, f1}
};
dict[val].Invoke();
哪个会表现更好?案件数量如何影响绩效?
这是一个速度问题,所以请先阅读速度说明:https://ericlippert.com/2012/12/17/performance-rant/
使用实际的整数常量,我的赌注是在选择动作时,Swtich / case表现更好。这是在比较中使用常量而不是变量的好处。但是,在这种情况下,最大的消费者将是动作本身,而不是触发触发查找的动作。
总体上,次要注意事项-代码的可读性-在这里将更为重要。有20种可能的操作/选项,为了提高可读性,我绝对希望使用Dictionary<int, Action>
变体。用for循环查找正确的键比使用20个case的switch语句更具可读性。