Tag: 开关语句

Switch语句中的大小写顺序是否会改变性能?

假设我有一个如下的switch语句 switch(alphabet) { case “f”: //do something break; case “c”: //do something break; case “a”: //do something break; case “e”: //do something break; } 现在假设我知道有Alphabet e的频率最高,分别是a,c和f。 所以,我只是重新组织了case语句顺序,并按如下方式进行了重构: switch(alphabet) { case “e”: //do something break; case “a”: //do something break; case “c”: //do something break; case “f”: //do something break; } 第二个switch语句会比第一个switch语句快吗? 如果是,如果在我的程序中我需要多次调用此switch语句,那将是一个实质性的改进吗? 或者,如果没有,我如何使用我的频率知识来提高性能?

用于避免开启类型的设计模式或接受的解决方案

我正在尝试找到一个好的,干净的设计模式或普遍接受的实现来处理类型的枚举,其中仅在运行时知道单个类型。 我之前已经问过类似的问题,但我仍然不清楚替代实现相比交换机或一系列if-thens有明显的优势。 首先,我将演示一些实现,然后我将问一个问题: 这些实现是否比简单的交换机更好或更优先? 如果是这样,为什么? 如果没有,为什么不呢? 在我的应用程序中,我通过流发送和接收数据。 在运行时,我通过序列化接收数据结构,该结构描述了我的二进制数据中的字段。 这包括字段中的数据类型,即Int32,Bool,Double等。在设计时,我所知道的是数据可能是几种类型中的一种。 我需要从流中读取字段并适当地处理数据。 如果允许启用类型,则解决方案可能如下: 非工作代码: object ReadDataField(byte [] buff, ref int position, Dictionary fields) { object value; int field = buff[position]; position++; switch(fields[field]) { case typeof(Int32): { value = (Int32)BitConverter.ToInt32(buff, position); position += sizeof(Int32); break; } case typeof(Int16): { value = (Int16)BitConverter.ToInt16(buff, position); position += sizeof(Int16); break; } […]