如題,想請教各位大神前輩們:
小弟想不通為什麼會發生這個問題,
出現索引超出範圍的兩種原因:
1:比如一個迴圈 for (int i = 1; i < Model.detailsModels.Count; i++){}
Model.detailsModels.Count小於0,這樣就會出現索引超出範圍,可以在迴圈上加一個判斷if(Model.detailsModels.Count > 0){}
2:在獲取資料時,資料庫可能沒有一個資料而導致出現該異常。比如控制器裡面Model.detailsModels根本沒有獲取到對應資料,而在頁面上展示的時候出現了該Model,這樣也會報錯。
—System.ArgumentOutOfRangeException:“索引超出范围。必须为非负值并小于集合大小。 Arg_ParamName_Name”
小弟的code
Controller:
public ActionResult Test()
{
List<string> fruitA = new List<string>();
List<string> fruitB = new List<string>();
List<string> fruitC = new List<string>();
fruitA.Add("Apple");
fruitA.Add("AppleJuice");
fruitB.Add("Banana");
fruitB.Add("BananaJuice");
if (fruitA.Count > 0)
{
for (int i = 0; i <= fruitA.Count; i++)
{
fruitC.Add(fruitA[i] + "—" + fruitB[i]);
}
}
return View();
}
小弟想做
fruitA:
[0] Apple
[1] AppleJuice
fruitB:
[0] Banana
[1] BananaJuice
fruitC:
[0] Apple—Banana
[1] AppleJuice—BananaJuice
下中斷點後發現,已經都有產生好了,但就是會發生錯誤:
想請問該如何修改我的code,以及為什麼會發生這種原因呢?
看了很多文獻,卻依然搞不太懂......
這一行的問題
int i = 0; i <= fruitA.Count; i++
i 從 0 開始,但fruitA 只有2個
fruitA[0]
fruitA[1]
當跑到 i = 2 的時候
找不到索引 fruitA[2] 就錯誤了
提供你另一個作法,如果資料長度是對稱的,可以用下面的作法
List<string> fruitA = new List<string>();
List<string> fruitB = new List<string>();
List<string> fruitC = new List<string>();
fruitA.Add("Apple");
fruitA.Add("AppleJuice");
fruitB.Add("Banana");
fruitB.Add("BananaJuice");
fruitC = fruitA.Zip(fruitB, (a, b) => $"{a}-{b}").ToList();
for (int i = 0; i <= fruitA.Count; i++)
改成
for (int i = 0; i < fruitA.Count; i++)
就可以了