我的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循环遍历每个项目(讴歌,宝马,别克......沃尔沃),然后由于某种原因继续前进。它不会停止。
为了测试代码,我创建了一个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&lt; modelCount,都读为43.然后我按f10(跳过)并抛出错误。
我不确定我是否错误地启动了我的列表。我看到了我必须做的某个地方。添加到新列表,但我想,因为我使用Linq .ToList()创建我的列表,它将正常工作。
内部错误表示它为空。这是错误的大部分细节的图片。
答案 0 :(得分:0)
您确定ddcount变量在所有引用中都是正确的吗?例如,当你初始化变量时,它是ddcount,小写C,但是当你稍后引用变量时,它是ddCount,大写C.我会先纠正它。
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++;
}
}
另外,我会检查你如何在某个html部分编写htmls,如果它是纯HTML,那么@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, "Audi", StringComparison.CurrentCultureIgnoreCase)).ToList();
//dynamicOwnershipChoiceQuestion.Brand = "Audi"
for (var i = 6; i <= 10; i++)
{
var ddcount = 1; //changes after this
var modelCount = modelList.Count;
//some html
<div>Car brands @i</div>
for (var y = 0; y < modelCount; y++)
{
<option id="dd-@i-@ddcount">@modelList[y]</option>
ddcount++;
}
}
}
最后,我会断言
dynamicOwnershipChoiceQuestion.Brand = "Audi"
确保它没有返回任何奇怪的东西。
希望这有帮助