将switch case转为条件驱动(转载)
switch case是一种.net里面常用的条件分支语句,挺好用的;不过有些缺点:
1.在有包含大量条件和执行语句的时候代码结构会很乱。
2.不太符合面对对象的设计原则。
3.对于查询条件是否满足一定范围这样的逻辑不太好用。
将其转为条件驱动的实现,(本例使用Dictionary+Delegate的方式)
View Code
1.常用的委托有Action<T> 和 Func<T>
2.也可以自己定义委托以支持任意方法
3.可以传递Delegate的方式实现更为复杂的多重逻辑
4.毫无疑问,在简单的情况下不是很使适用条件驱动这样相对复杂的方案
关于性能问题:
//准备数据
Random random = new Random();
int length = 1000000;
EnumType[] testData = new EnumType[length];
for (int i = 0; i < length; i++)
{
testData[i] = (EnumType)Enum.Parse(typeof(EnumType), random.Next(1, 11).ToString());
}
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < testData.Length; i++)
{
SwitchTest.Test(testData[i]);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);//13 执行100万次
sw.Restart();
for (int i = 0; i < testData.Length; i++)
{
SwitchTest.Test2(testData[i]);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);//62 执行100万次
执行10万次分别消耗9毫秒 和7毫秒,
执行100万次分别消耗13毫秒 和62毫秒,
(可能有点误差,不过这样小的消耗主要是为了表明其实两种写法的性能权重都不高)
好久之前的东西了。。。最近正好又遇到,就记录在blog中,顺便看看有没有什么可以优化的地方
欢迎添加我的公众号一起深入探讨技术手艺人的那些事!
如果您觉得本文的内容有趣就扫一下吧!捐赠互勉!


浙公网安备 33010602011771号