gpt4 book ai didi

c# - 为什么我的 foreach 循环抛出索引超出范围错误?

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:04 25 4
gpt4 key购买 nike

我的 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() 创建列表,它会正常工作。

内部错误说它是空的。这是错误的大部分细节的图片。

enter image description here

最佳答案

您确定 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++;
}
}

此外,我会检查你是如何在//some html 部分中编写html 的,如果它是纯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"

确保它没有返回任何奇怪的东西。

希望对你有帮助

关于c# - 为什么我的 foreach 循环抛出索引超出范围错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34859732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com