我正在编写一个应用程序,需要读取一组JSON文件并从应用程序中的模型创建对象。这似乎并不那么困难,并且代码对我来说似乎很正确,但是我正在使用一个数组来存储JSON字符串,并且由于某种原因,Visual Studio用红色强调了数组名并说这是“未分配的局部变量”,即使我在foreach循环之前声明了它。
我是C#的新手,所以如果有人能让我知道如何更正此问题,我将不胜感激。
有问题的行以“ lotRanges [i] = JsonConvert ...”开头
namespace InternalReceiptImport.Services
{
interface ILotRangeService
{
List<LotRange> GetAll();
}
public class LotRangeService : ILotRangeService
{
public List<LotRange> GetAll()
{
string jsonFilePath = @"\Data";
Array files = Directory.GetFiles(jsonFilePath);
LotRange[] lotRanges;
int i = 0;
foreach (string filename in files)
{
string filepath = jsonFilePath + "\\" + filename;
string json = File.ReadAllText(filepath);
lotRanges[i] = JsonConvert.DeserializeObject<LotRange>(json);
i++;
}
List<LotRange> listLotRanges = lotRanges.ToList();
return listLotRanges;
}
}
}
下面建议我只使用列表而不是数组。我试过了,但是在我用来添加到列表的那一行上却给了我同样的错误。这是代码...
namespace InternalReceiptImport.Services
{
interface ILotRangeService
{
List<LotRange> GetAll();
}
public class LotRangeService : ILotRangeService
{
public List<LotRange> GetAll()
{
string jsonFilePath = @"\Data";
Array files = Directory.GetFiles(jsonFilePath);
List<LotRange> listLotRanges;
int i = 0;
foreach (string filename in files)
{
string filepath = jsonFilePath + "\\" + filename;
string json = File.ReadAllText(filepath);
listLotRanges.Add(JsonConvert.DeserializeObject<LotRange>(json));
i++;
}
return listLotRanges;
}
}
}
答案 0 :(得分:1)
在两个示例中,问题都在于声明了lotRanges
,但尚未为其分配值,即它是null
。为了解决这个问题,您要做的就是为您声明的变量分配一个值。在数组的情况下,您必须预先定义它的大小:
Array files = Directory.GetFiles(jsonFilePath);
LotRange[] lotRanges = new LotRange[files.Length];
在使用List<LotRange>
的情况下,您不需要预先知道大小,这就是人们倾向于在这种情况下使用List<T>
的原因之一。
List<LotRange> lotRanges = new List<LotRange>();