从文件读取时,索引超出了数组的范围

时间:2018-10-19 06:41:22

标签: c#

我希望大家都过得愉快。所以我修复了程序的一个错误,但又出现了另一个:/

下面是我创建我的代码并从文件中读取数据的代码:

  void ReadData(string fileName, Branch[] branches)
    {
        string shopsName = null;
        using (StreamReader reader = new StreamReader(@fileName))
        {
            string line = null;
            line = reader.ReadLine();
            if (line != null)
            {
                shopsName = line;
            }
            Branch tempBranches = TempBranch(branches, shopsName);
            string address = reader.ReadLine();
            string phoneNumber = reader.ReadLine();
            while (null != (line = reader.ReadLine()))
            {
                string[] values = line.Split(';');
                string facturer = values[0];
                string model = values[1];
                double capacity = double.Parse(values[2]);
                string energyClass = values[3];
                string assemblyType = values[4];
                string color = values[5];
                string attribute = values[6];
                double cost = double.Parse(values[7]);
                Fridges fridge = new Fridges(facturer, model, capacity, energyClass, assemblyType, color, attribute, cost);
                tempBranches.fridges.AddFridge(fridge);
            }
        }

还有使用TempBranch方法的代码。错误在此行:if (branches[i].ShopsName == shopsName)。希望您能为我提供帮助,因为我昨天尝试解决此问题已有30分钟,但仍然无法使用:D

private static Branch TempBranch(Branch[] branches, string shopsName)
    {
        for (int i = 0; i < MaxNumberOfFridges; i++)
        {
            if (branches[i].ShopsName == shopsName)
            {
                return branches[i];
            }
        }
        return null;
    }

4 个答案:

答案 0 :(得分:3)

如果将MaxNumberOfFridges替换为branches.Length,它将仅尝试查找位于Branch数组范围内的branches。它不起作用的原因是因为您试图访问的索引大于数组的Length

答案 1 :(得分:1)

尝试这个。如果您不知道数组的长度,请使用foreach。

private static Branch TempBranch(Branch[] branches, string shopsName)
    {
        foreach(var branch in branches)
        {
            if (branch.ShopsName == shopsName)
            {
                return branch;
            }
        }
        return null;
    }

答案 2 :(得分:0)

出现此错误是因为MaxNumberOfFridges比分支length大..为简化起见,假设MaxNumberOfFridges20arry length为10,所以您正在尝试访问数组长度之外的数组中的元素11

修复

  for (int i = 0; i < branches.Length; i++)
    {
        if (branches[i].ShopsName == shopsName)
        {
            return branches[i];
        }
    }

另一种选择是使用foreach循环

foreach(var b in branches)
{
    if (b.ShopsName == shopsName)
    {
        return branches[i];
    }
}

答案 3 :(得分:0)

您也可以尝试使用LINQ查询,

return branches.Where(b => b.ShopsName == shopsName).FirstOrDefault(); 

编辑:

出现在新帖子中的NullReferenceError是由于创建商店的函数中返回null所致。这是因为找不到指定的商店名称。

因此,它尝试将冰箱添加到不存在的商店,这是不可能的。您将必须添加支票,以免发生这种情况。