Почему я не могу заполнить массив внутри объявления метода в C #? - PullRequest
0 голосов
/ 01 октября 2019

Я пишу приложение, в котором мне нужно прочитать набор файлов 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 Ответ

1 голос
/ 01 октября 2019

в обоих ваших примерах проблема в том, что объявлено lotRanges, но ему еще не присвоено значение, то есть null. Чтобы это исправить, все, что вам нужно сделать, это присвоить значение объявленной переменной. В случае с массивом вы должны определить его размер заранее:

Array files = Directory.GetFiles(jsonFilePath);
LotRange[] lotRanges = new LotRange[files.Length];

А в случае использования List<LotRange> вам не нужно знать размер заранее, который является одним изпричины, по которым люди предпочитают использовать List<T> для подобных сценариев.

List<LotRange> lotRanges = new List<LotRange>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...