iT邦幫忙

0

C# MVC Arg_ParamName_Name

  • 分享至 

  • xImage

如題,想請教各位大神前輩們:
小弟想不通為什麼會發生這個問題,

出現索引超出範圍的兩種原因:
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

下中斷點後發現,已經都有產生好了,但就是會發生錯誤:
https://ithelp.ithome.com.tw/upload/images/20220331/20146654BEykDLhjMe.png

想請問該如何修改我的code,以及為什麼會發生這種原因呢?
看了很多文獻,卻依然搞不太懂......
/images/emoticon/emoticon02.gif

Homura iT邦高手 1 級 ‧ 2022-03-31 11:47:24 檢舉
不會用for迴圈而已!@@
看完科大、天大、海綿大的,我恍然大悟了.....
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
科科
iT邦好手 8 級 ‧ 2022-03-31 10:57:24
最佳解答

這一行的問題

int i = 0; i <= fruitA.Count; i++

i 從 0 開始,但fruitA 只有2個
fruitA[0]
fruitA[1]

當跑到 i = 2 的時候
找不到索引 fruitA[2] 就錯誤了

謝謝科大! 完全恍然大悟了XD

1
天黑
iT邦研究生 5 級 ‧ 2022-03-31 11:54:58

提供你另一個作法,如果資料長度是對稱的,可以用下面的作法

            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();

謝謝天大!這作法 長知識了XD

1
海綿寶寶
iT邦大神 1 級 ‧ 2022-03-31 12:07:38
for (int i = 0; i <= fruitA.Count; i++)

改成

for (int i = 0; i < fruitA.Count; i++)

就可以了

謝謝海綿大!

我要發表回答

立即登入回答