为什么我不能在C#的方法声明中填充数组?

时间:2019-10-01 14:08:25

标签: c# json asp.net-core

我正在编写一个应用程序,需要读取一组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;
        }
    }
}

1 个答案:

答案 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>();