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
试试这个
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], "");
}
}