C# ArrayList IndexOutOfRangeException

本文关键字:IndexOutOfRangeException ArrayList | 更新日期: 2024-11-06 04:32:38

我正在研究 asp.net mvc,我正在将一些数据从一个控制器发布到另一个控制器。

这是我的两个阵列列表来了。

第一个包含 id 的

-822602-822603-822604-822605-822607

第二个包含值

-Ara Sınav-Ödev-Ödev-Ödev-Final

我只想拆分这些值,但我得到空错误第二个。

这行得通

@{
string deger = Convert.ToString(ViewData["degerler"]);
int count = deger.Count(f => f == '-');
string[] ar = { "-" };
string ret = string.Empty;
for (int i = 0; i < count; i++)
{
    string[] split = deger.Split(ar, StringSplitOptions.RemoveEmptyEntries);
    <li>@split[0]</li>
    deger = deger.Replace(split[0], "");
}

}

这给出了超出范围的误差

@{
    string degerAd = Convert.ToString(ViewData["degerlerAd"]);
    int count2 = degerAd.Count(f => f == '-');
    string[] ar2 = { "-" };

    for (int i = 0; i < count2; i++)
    {
        string[] split2 = degerAd.Split(ar2, StringSplitOptions.RemoveEmptyEntries);
        <li>@split2[0]</li>
        degerAd = degerAd.Replace(split2[0], "");
    }
}
他们

是一样的,他们都有数据,但第二个不起作用。

错误https://i.stack.imgur.com/c7cTs.png

C# ArrayList IndexOutOfRangeException

试试这个

        string arr = "-Ara Sınav-Ödev-Ödev-Ödev-Final";
        string[] split = arr.TrimStart('-').Split('-');
        foreach (var item in split)
        {
            <li>item</li>
        }

这一行的问题:

degerAd = degerAd.Replace(split2[0], "");

面对单词"Ödev"后,字符串将变为"-----最终"(将替换3次出现)。要解决此问题split2可以将声明移出循环(未测试):

@{
    string degerAd = Convert.ToString(ViewData["degerlerAd"]);
    int count2 = degerAd.Count(f => f == '-');
    string[] ar2 = { "-" };
    string[] split2 = degerAd.Split(ar2, StringSplitOptions.RemoveEmptyEntries);
    for (int i = 0; i < count2; i++)
    {
        <li>@split2[i]</li>
    }
}

如果你想在ul中有不同的值,只需使用 Linq 方法Distinct 即可。取代

string[] split2 = degerAd.Split(ar2, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < count2; i++)
{
    <li>@split2[i]</li>
}

IENumerable<string> split2 = degerAd.Split(ar2, StringSplitOptions.RemoveEmptyEntries).Distinct();
foreach (string el in split2)
{
    <li>@el</li>
}
嗨,

必须专注于数组中的重复项。

如果您替换某些值意味着它将替换所有类似的值,因此它们可能会导致多次删除,因此您必须在删除之前计算重复计数。请尝试如下。

@{
string degerAd = Convert.ToString(ViewData["degerlerAd"]);
int count2 = degerAd.Count(f => f == '-');
string[] ar2 = { "-" };

for (int i = 0; i < count2; i++)
{
    string[] split2 = degerAd.Split(ar2, StringSplitOptions.RemoveEmptyEntries);
    int dupCount = 0;
    foreach (string s in split2)
    {
        if (s == split2[0])
        {
            dupCount += 1; 
        }
    }
    if(dupCount > 1)
    {
        dupCount = dupCount - 1;
        i = i + dupCount;
    }
    <li>@split2[0]</li>
    degerAd = degerAd.Replace(split2[0], "");
}
}