2012-09-30 72 views
0

我想在多維數組的幫助下形成一個應該看起來像這樣的列表。System.IndexOutOfRangeException當形成列表

[validatorKey][counter] 
1453   10 
1231   12 
6431   7 
1246   1 
1458   2 

但是,我無法應付它。順便說一句,這是我的方法。並且數組大小應該在方法的最後增加。我知道我應該使用Array.Resize(ref array,2);但由於我的數組是多維的,所以在這種情況下應該是合適的方法。

private int AracaAitSeferSayisiDondur(int pValidatorKey) 
{ 
    int iSeferSayisi = 0; 
    int[,] iSeferListesi = (int[,])ViewState["SeferListesi"]; 
    if (iSeferListesi == null) 
    iSeferListesi = new int[1,1]; 

    bool aynisiVarmi = false; 

    for (int i = 0; i < iSeferListesi.Length; i++) 
    { 
     if (iSeferListesi[i,0] == pValidatorKey) 
     { 
      aynisiVarmi = true; 
      iSeferListesi[i,1]++; 
      iSeferSayisi = iSeferListesi[i,1]++; 
      break; 
     } 
    } 
    if (!aynisiVarmi) 
    { 
     int arrayLength = iSeferListesi.Length; 
     iSeferListesi[arrayLength--, 0] = pValidatorKey; 
     iSeferListesi[arrayLength--, 1] = 1; 
     //IN THIS PART ARRAY SIZE SHOULD BE INCREASED 
     iSeferSayisi = iSeferListesi[arrayLength--, 1]; 
    } 
    ViewState["SeferListesi"] = iSeferListesi; 
    return iSeferSayisi; 
} 
+3

陣列不會長得很好。使用'List <>'或者'Dictionary <>'。 –

+0

有一個涉及調整多維數組[這裏](http://stackoverflow.com/q/6539571/704144)的問題。不過,我同意@Henk,列表或字典可能比陣列更適合您的需求。 –

+0

@ŞafakGür,謝謝你的兄弟。 –

回答

1

我認爲你需要sonmething喜歡:

// not tested 
private int AracaAitSeferSayisiDondur(int pValidatorKey) 
{ 
    var iSeferListesi = (Dictionary<int,int>)ViewState["SeferListesi"]; 
    if (iSeferListesi == null) 
     iSeferListesi = new Dictionary<int,int>; 

    int iSeferSayisi; 

    if (iSeferListesi.TryGetValue(pValidatorKey, out iSeferSayisi) 
    { 
     iSeferSayisi += 1; 
     iSeferListesi[pValidatorKey] = iSeferSayisi; 
     iSeferSayisi += 1; // is this OK ?? 
    } 
    else 
    { 
     iSeferSayisi = 1; 
     iSeferListesi[pValidatorKey] = iSeferSayisi; 
    } 

    ViewState["SeferListesi"] = iSeferListesi; 
    return iSeferSayisi; 
} 

iSeferListesi的雙重增量(源自你的代碼)可能不是你想要的,沒有它,if/else邏輯就變成ev更簡單。

1

Length proprety返回數組中元素的總數。

使用GetLength(dimension) method得到一個維度的大小:

for (int i = 0; i < iSeferListesi.GetLength(0); i++) 

和:

int arrayLength = iSeferListesi.GetLength(0); 
+0

但我得到這部分的錯誤。 'iSeferListesi [arrayLength--,0] = pValidatorKey;' –

+0

@MehmetBudak:同在那裏:'int arrayLength = iSeferListesi.GetLength(0);' – Guffa

+0

Guffa感謝您的幫助! –

相關問題