C#ArrayList IndexOutOfRangeException

C#ArrayList IndexOutOfRangeException,c#,asp.net-mvc,C#,Asp.net Mvc,我正在使用asp.net mvc,我正在将一些数据从一个控制器发布到另一个控制器 这是我的两个阵列列表 第一个包含id -822602-822603-822604-822605-822607 第二个包含值 -Ara Sınav-Ödev-Ödev-Ödev-Final 我只想拆分这些值,但第二个值出现null错误 这很有效 @{ string deger = Convert.ToString(ViewData["degerler"]); int count = deger.Count(f

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

这是我的两个阵列列表

第一个包含id

-822602-822603-822604-822605-822607
第二个包含值

-Ara Sınav-Ödev-Ödev-Ödev-Final
我只想拆分这些值,但第二个值出现null错误

这很有效

@{
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], "");
}
@{
字符串deger=Convert.ToString(ViewData[“degerler]”);
int count=deger.count(f=>f='-');
字符串[]ar={“-”};
string ret=string.Empty;
for(int i=0;i@拆分[0]
除气=除气。更换(拆分[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], "");
    }
}
@{
string degerAd=Convert.ToString(ViewData[“degererad”]);
int count2=degerAd.Count(f=>f='-');
字符串[]ar2={“-”};
对于(int i=0;i@拆分2[0]
degerAd=degerAd.Replace(拆分2[0],“”);
}
}
它们是一样的,它们都有数据,但第二个不起作用

错误
这一行的问题是:

degerAd = degerAd.Replace(split2[0], "");
在面对单词“Ödev”后,字符串将变为“-----最终”(将替换3次出现)。要修复此
split2
声明,可以将其移到循环之外(未测试):

IENumerable split2=degerAd.Split(ar2,StringSplitOptions.RemoveEmptyEntries).Distinct();
foreach(拆分2中的字符串el)
{
  • @埃尔
  • }
    试试这个

            string arr = "-Ara Sınav-Ödev-Ödev-Ödev-Final";
            string[] split = arr.TrimStart('-').Split('-');
            foreach (var item in split)
            {
                <li>item</li>
            }
    
    string arr=“-Ara Sınav-Ödev-Ödev-Ödev Final”;
    string[]split=arr.TrimStart('-').split('-');
    foreach(拆分中的var项目)
    {
    
  • 项目
  • }
    Hi必须集中精力处理阵列中的副本

    如果替换某个值,则表示它将替换所有与之类似的值,因此它们可能会导致多次删除,因此在删除之前必须对重复计数进行计数。请尝试下面的方法

    @{
    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], "");
    }
    }
    
    @{
    string degerAd=Convert.ToString(ViewData[“degererad”]);
    int count2=degerAd.Count(f=>f='-');
    字符串[]ar2={“-”};
    对于(int i=0;i1)
    {
    dupCount=dupCount-1;
    i=i+dupCount;
    }
    
  • @拆分2[0]
  • degerAd=degerAd.Replace(拆分2[0],“”); } }
    您可以发布错误吗?ArrayList在哪里定义?您是否设置了断点来调试错误?在拆分这些列表之前,我没有错误。
    IENumerable<string> split2 = degerAd.Split(ar2, StringSplitOptions.RemoveEmptyEntries).Distinct();
    
    foreach (string el in split2)
    {
        <li>@el</li>
    }
    
            string arr = "-Ara Sınav-Ödev-Ödev-Ödev-Final";
            string[] split = arr.TrimStart('-').Split('-');
            foreach (var item in split)
            {
                <li>item</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], "");
    }
    }