2016-08-02 28 views
1

請幫助我如何將這些值添加到字典?我想刪除整個switch語句並使用Dictionary來代替它來存儲值並將int值返回給方法。如何做呢?如何使用Dictionary在c#中的Method中存儲值?

 private int ControlDecode(byte b) 
    { 

     int itype = -1; 
     int ipacekttype = b & 0x0F; 
     switch (ipacekttype) 
     { 
      case 0x01: 
       if ((b & 0xF0) == 0x10 || (b & 0xF0) == 0x20 || (b & 0xF0) == 0x50 || (b & 0xF0) == 0x60) 
        itype = 0x11; 
       break; 
      case 0x02: 
       if ((b & 0xF0) == 0x20 || (b & 0xF0) == 0x60 || (b & 0xF0) == 0x10 || (b & 0xF0) == 0x50) 
        itype = 0x12; 
       break; 
      case 0x03: 
       if ((b & 0xF0) == 0x00 || (b & 0xF0) == 0x10 || (b & 0xF0) == 0x20 || (b & 0xF0) == 0x40 || (b & 0xF0) == 0x50 || (b & 0xF0) == 0x56) 
        itype = 0x13; 
       break; 
      case 0x04: 
       if ((b & 0xF0) == 0x30 || (b & 0xF0) == 0x70) 
        itype = 0x14; 
       break; 
      case 0x05: 
       if ((b & 0xF0) == 0x00 || (b & 0xF0) == 0x10 || (b & 0xF0) == 0x20 || (b & 0xF0) == 0x40 || (b & 0xF0) == 0x50 || (b & 0xF0) == 0x56) 
        itype = 0x15; 
       break; 
      case 0x06: 
       if ((b & 0xF0) == 0x30 || (b & 0xF0) == 0x70) 
        itype = 0x16; 
       break; 
      case 0x08: 
        itype = 0x38; 
        break; 
      case 0x09: 
        itype = 0x39; 
        break; 
      case 0x0A: 
        itype = 0x3A; 
        break; 
      case 0x0B: 
        itype = 0x3B; 
        break; 
      case 0x0C: 
        itype = 0x3C; 
        break; 
      default: 
       break; 
     } 
     return itype; 
    } 

回答

2

該函數將使用字典映射而不是switch語句返回相同的結果。

private int ControlDecode(byte b) 
{ 
    int ipacekttype = b & 0x0F; 
    if (ipacekttype >= 0x08 && ipacekttype <= 0x0C) 
     return 0x30 + ipacekttype; 

    var map = new Dictionary<int, int> 
     { 
      {0x11, 0x11 }, {0x21, 0x11 }, {0x51, 0x11 }, {0x61, 0x11 }, 
      {0x12, 0x12 }, {0x22, 0x12 }, {0x52, 0x12 }, {0x62, 0x12 }, 
      {0x03, 0x13 }, {0x13, 0x13 }, {0x23, 0x13 }, {0x43, 0x13 }, {0x53, 0x13 }, /*{0x56, 0x13 }, */ 
      {0x34, 0x14 }, {0x74, 0x14 }, 
      {0x05, 0x15 }, {0x15, 0x15 }, {0x25, 0x15 }, {0x45, 0x15 }, {0x55, 0x15 }, /*{0x56, 0x15 }, */ 
      {0x36, 0x16 }, {0x76, 0x16 }, 
     }; 

    return map.ContainsKey(b) ? map[b] : -1; 
} 

注:有你的邏輯兩個錯誤,我已經在地圖上評論了他們的價值觀強調。我的猜測是這是一個複製粘貼錯誤。它們應該分別替換爲0x630x65

+0

太棒了!謝謝yu –

+0

是的,有你指出的錯誤.. –

相關問題