我的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,Buick ... Volvo),然后因某种原因继续进行。它不会停止。
为了测试代码,我创建了一个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 < modelCount上悬停,两者都读取43。然后我点击f10(跳过),就会抛出错误。
我不确定是否正确初始化了我的列表。我看到有人说必须对新列表执行.add,但我想既然我使用Linq .ToList()创建我的列表,它应该能正常工作。
内部错误显示为空。以下是错误的大部分详细信息的图片。