洒家的窝~~

博客园 首页 联系 订阅 管理

当case子句数量不多时,编译器会将其翻译为类似于一系列if语句这样的结构,并通过“==”运算符来与每种case进行比较。

当case子句的数量较多时,编译器则会生成一个内部类,并提供一个字典字段。这个字典字段的key是字符串类型,value是整数类型;其中key记录了每种case,而value记录了对应case子句的序号。之后,以switch语句的参数s作为key,取出对应的value,再利用switch指令做跳转。

这样做是利用了Dictionary<TKey,TValue>类型通过key来取值的时间复杂度接近于O(1)这种特性(请参见MSDN上关于Dictionary泛型类的说明),有助于提高效率。此外,这个字段在需要的时候才进行初始化,并且只初始化一次,进一步提高了程序的整体效率。

如果你的程序中用了大量if语句来判断一个字符串对象是否具有给定的值,不妨将其改为用switch语句实现。如果你有其他引用类型对象,要进行类似的判断,又不能使用switch语句(C#语法不允许),可以尝试自己写一个字典类的字段,以给定的几种可能的对象做 key,以连续的整数值作为value,然后每次判断时,通过以给定对象(参数)作为key,取到vlaue后再用switch进行判断。

此文章转自网络

posted on 2009-12-02 15:09  tianxu0836  阅读(342)  评论(0编辑  收藏  举报