2016-08-02 22 views
1

私は下に次のコードをしている:エラーがここで発生しの追加項目はSystem.IndexOutOfRangeExceptionを返します。インデックスが配列の境界外です

List<string> group = new List<string>(); 
List<int> groupInNumber = new List<int>(); 
Dictionary<string, List<string>> dicMyMap = new Dictionary<string, List<string>>(); 
Dictionary<string, int[]> a = new Dictionary<string, int[]>(); 
Dictionary<string, string[]> b = new Dictionary<string, string[]>(); 

private void SetData(out ExpandableListViewAdapter mAdapter) 
    { 
     int[] currentStatus = a["currentStatus"]; 
     string[] statusDesc = b["description"]; 
     int[] ticketID = a["ticketID"]; 

     foreach (int s in currentStatus) 
     { 
      if (s == 1) 
      { 
       group.Add(statusDesc[0]); 
      } 
      else if (s == 2) 
      { 
       group.Add(statusDesc[1]); 
      } 
      else if (s == 3) 
      { 
       group.Add(statusDesc[2]); 
      } 
      else if (s == 4) 
      { 
       group.Add(statusDesc[3]); 
      } 
      else if (s == 5) 
      { 
       group.Add(statusDesc[4]); 
      } 
      else if (s == 6) 
      { 
       group.Add(statusDesc[5]); 
      } 
      else if (s == 7) 
      { 
       group.Add(statusDesc[6]); 
      } 
      else if (s == 8) 
      { 
       group.Add(statusDesc[7]); 
      } 
      else if (s == 9) 
      { 
       group.Add(statusDesc[8]); 
      } 
      else if (s == 10) 
      { 
       group.Add(statusDesc[9]); 
      } 
     } 

     for (int p = 0; p <= ticketID.Count(); p++) 
     { 
      groupInNumber.Add(ticketID[p]); 
     } 

     List<string> ticket = new List<string>(); 
     for (int z = 0; z <= ticketID.Count(); z++) 
     { 
      string tix = ticketID[z].ToString(); 
      ticket.Add(tix); 
      dicMyMap.Add(groupInNumber[z].ToString(), ticket); 
      ticket.Remove(tix); 
     } 

     mAdapter = new ExpandableListViewAdapter(this, group, dicMyMap); 
    } 

は、groupInNumber.Add(ticketID[p]);は私が理解していないことは、なぜあるインデックス0が配列内の最初の値を参照する必要がある場合は、範囲外です。 int[] ticketID = a["ticketID"];のアイテムを数えようとしましたが、nullではなく、39(配列のアイテム数)が返されました。ここで

+0

あなたは 'スイッチに見てかかることがあります'ステートメント。 –

+1

コンテキスト外... 'else-if'ラダーを' switch 'に置き換えることができます –

+3

z <= ticketID.Count()が間違っているためです。 z

答えて

5

はあなたの問題です:

for (int p = 0; p <= ticketID.Count(); p++) 
{ 
    groupInNumber.Add(ticketID[p]); 
} 

それは次のようになります。

for (int p = 0; p < ticketID.Count(); p++) 

あなたは反復があまりにも遠く1つのインデックスになります。 ticketID以来

がある:0...910アイテムが...そこそこ、それはまた、これは


Offtopic他forのループに適用されますp < ticketID.Count()

でなければなりません0..count-1へのループ用に作成されていますArrayLengthプロパティを使用することもできます。

for (int p = 0; p < ticketID.Length; p++) 

あなたgroupInNumberList<int>です。 ListクラスもAddRange()方法があります...

for (int p = 0; p <= ticketID.Count(); p++) 
{ 
    groupInNumber.Add(ticketID[p]); 
} 

だから、このforループを...に置き換えることができます:

groupInNumber.AddRange(ticketID); 
関連する問題