【发布时间】:2016-04-23 22:04:01
【问题描述】:
我的 foreach 循环抛出索引超出范围错误。我有一个字符串列表,以及一个遍历它的 foreach 循环。这是我初始化列表的代码,以及引发错误的 foreach 循环。
const string modelString = "Acura,Audi,BMW,Buick,Cadillac,Chevrolet,Chrysler,Dodge,Ferrari,Ford,GM,GEM,GMC,Honda,Hummer,Hyundai,Infiniti,Isuzu,Jaguar,Jeep,Kia,Lamborghini,Land Rover,Lexus,Lincoln,Lotus,Mazda,Mercedes-Benz,Mercury,Mini,Mitsubishi,Nissan,Oldsmobile,Peugeot,Pontiac,Porsche,Regal,Saab,Saturn,Subaru,Suzuki,Toyota,Volkswagen,Volvo";
var splitString = modelString.Split(',');
var modelList = splitString.Where(str => !string.Equals(str, dynamicOwnershipChoiceQuestion.Brand, StringComparison.CurrentCultureIgnoreCase)).ToList();
//dynamicOwnershipChoiceQuestion.Brand = "Audi"
for (var i = 6; i <= 10; i++)
{
var ddcount = 1;
//some html
@foreach (var carModel in modelList){
<option id="dd-@i-@ddCount">@carModel</option>
ddCount++;
}
}
foreach 循环遍历每个项目(Acura、BMW、别克...沃尔沃),然后出于某种原因继续运行。它不会停止。
为了测试代码,我创建了一个 for 循环而不是 foreach 循环。变化如下:
var ddcount = 1; //changes after this
var modelCount = modelList.Count;
//some html
@for (var y = 0; y < modelCount; y++)
{
<option id="dd-@i-@ddCount">@modelList[y]</option>
ddCount++;
}
当我运行此代码时,在循环完成循环后,我得到相同的索引超出范围错误。 modelCount = 43。循环运行43次,然后y达到43,条件设置为false,然后循环继续进行。 ddcount 达到 44(这是有道理的,因为它从 1 开始,然后加上 43)。在 ddcount 达到 44 后,调试器返回到 for 循环,y 被设置为 43。然后我点击下一个,并将鼠标悬停在 y
我不确定我是否错误地启动了我的列表。我在某个地方看到了我必须做的 .add 到新列表,但我认为既然我使用 Linq .ToList() 创建了我的列表,它会正常工作。
内部错误说它是空的。这是错误的大部分细节的图片。
【问题讨论】:
-
错误实际发生在哪一行?我无法发现您的 for 循环有问题,所以我想知道它是否发生在循环后的第一行?
-
foreach循环的那一行出现错误。这一行:foreach (var carModel in modelList) 或者在for循环中:for (var y = 0; y
-
你确定你的代码和你的 dll 是同步的吗?
-
我不确定我的代码和 dll 是否同步。我尝试过清洁和重建。我目前将尝试保存、关闭、关闭 Visual Studio 并重新启动所有内容。
-
如果在分配 Linq 后检查 modelList 的内容,它的值是多少?它会在最后一个值之后终止吗?数是多少?