我希望大家都过得愉快。所以我修复了程序的一个错误,但又出现了另一个:/
下面是我创建我的代码并从文件中读取数据的代码:
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;
}
答案 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
大..为简化起见,假设MaxNumberOfFridges
为20
但arry 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所致。这是因为找不到指定的商店名称。
因此,它尝试将冰箱添加到不存在的商店,这是不可能的。您将必须添加支票,以免发生这种情况。