将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中,顺便看看有没有什么可以优化的地方

posted @ 2011-12-05 14:49  ^_^肥仔John  阅读(270)  评论(0)    收藏  举报