2016-08-02 21 views
1

これらの値を辞書に追加する方法を教えてください。 switch文全体を削除し、代わりにDictionaryを使用して値を格納し、int値をメソッドに戻したいとします。どのようにそれを行うことができますか?辞書を使用してC#のメソッドに値を格納する方法

 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; 
} 

注:私はマップにその値をコメントアウトすることによって強調してきたあなたのロジックでは2つのバグがあります。私の推測では、それはコピー・ペースト・エラーだということです。それらはそれぞれ0x63とにそれぞれ置換されるべきです。

+0

素晴らしい!ありがとうございました –

+0

はい、あなたが指摘しているエラーがあります.. –

関連する問題