Object reference not set to an instance of an object при добавлении второго элемента коллекции [дубликат]

126
28 июля 2021, 13:30
На этот вопрос уже даны ответы здесь:
Что такое NullReferenceException, и как мне исправить код? (2 ответа)
Закрыт 1 год назад.

Мой код:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using OfficeOpenXml;
using Parser.Models;
namespace Parser
{
    class Program
    {
        static void Main(string[] args)
        {
            var articles = new List<Article>();
            var groups = new List<Group>();
            var competitors = new List<Competitor>();
            var file = new FileInfo("zoomos.xlsx");
            using (ExcelPackage package = new ExcelPackage(file))
            {
                var worksheet = package.Workbook.Worksheets[1];
                int colCount = worksheet.Dimension.End.Column;  //get column Count
                int rowCount = worksheet.Dimension.End.Row;     //get row count
                for (int i = 2; i <= rowCount; i++)
                {
                    articles.Add(new Article
                    {
                        Value = worksheet.Cells[i,1].Value.ToString()
                    });
                    for (int j = 19; j <= colCount; j++)
                    {
                        competitors.Add(new Competitor //вот тут ошибка, первый add - проходит.
                        {
                            Name = worksheet.Cells[1,j].Value.ToString() ?? "No Name",
                            Price = Double.Parse(worksheet.Cells[i,j].Value.ToString() ?? "0",CultureInfo.InvariantCulture)
                        });
                    }
                    groups.Add(new Group
                    {
                        SubGroup = worksheet.Cells[i,2].Value.ToString(),
                        Category = worksheet.Cells[i,3].Value.ToString(),
                        Brand = worksheet.Cells[i,4].Value.ToString() ?? "",
                        Model = worksheet.Cells[i,5].Value.ToString(),
                        FinalPrice = Double.Parse(worksheet.Cells[i,6].Value.ToString() ?? "0",CultureInfo.InvariantCulture),
                        ExtraCharge = Double.Parse(worksheet.Cells[i,7].Value.ToString() ?? "0",CultureInfo.InvariantCulture),
                        MarginMin = Double.Parse(worksheet.Cells[i,8].Value.ToString() ?? "0",CultureInfo.InvariantCulture),
                        MarginAvg = Double.Parse(worksheet.Cells[i,9].Value.ToString() ?? "0",CultureInfo.InvariantCulture),
                        MarginMax = Double.Parse(worksheet.Cells[i,10].Value.ToString() ?? "0",CultureInfo.InvariantCulture),
                        EntryPrice = Double.Parse(worksheet.Cells[i,11].Value.ToString() ?? "0",CultureInfo.InvariantCulture),
                        Price = Double.Parse(worksheet.Cells[i,12].Value.ToString() ?? "0",CultureInfo.InvariantCulture),
                        MinPrice = Double.Parse(worksheet.Cells[i,15].Value.ToString() ?? "0",CultureInfo.InvariantCulture),
                        AvgPrice = Double.Parse(worksheet.Cells[i,17].Value.ToString() ?? "0",CultureInfo.InvariantCulture),
                        MaxPrice = Double.Parse(worksheet.Cells[i,18].Value.ToString() ?? "0",CultureInfo.InvariantCulture),
                    });
                }
            }
            using (var db = new Context())
            {
                db.Articles.AddRange(articles);
                db.Competitors.AddRange(competitors);
                db.Groups.AddRange(groups);
            }
            Console.WriteLine("Done");
        }
    }
}

Ошибка следующего рода:

Суть в том что элемент точно есть и я добавил проверку на зануленные элементы

Что я делаю не так?

Answer 1

Попробуйте так:

for (int j = 19; j <= colCount; j++)
{
   var name = worksheet.Cells[1,j]?.Value?.ToString() ?? "No Name";
   Double.TryParse(worksheet.Cells[i,j]?.Value?.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out price)
   competitors.Add(new Competitor //вот тут ошибка, первый add - проходит.
   {
       Name = name,
       Price = price
   });
}
READ ALSO
вывод промежуточных данных в строку таблицы c#

вывод промежуточных данных в строку таблицы c#

Есть веб-форма, на которой существует несколько выпадающих списков и некая таблица с заполненными даннымиполе Pocket_num соответствует выбору...

172
Событие добавления элемента в Hashtable

Событие добавления элемента в Hashtable

У меня есть объект типа Hashtable, необходимо создать событие, которое бы отслеживало добавление элемента и указывало бы ключ, по которому я добавляю...

302
EF Core - проверка до update/insert

EF Core - проверка до update/insert

Пишу приложение которые часто (и много) перебирает данных с xlsx таблиц поставщиков

228
Работа с классом из другого скрипта

Работа с классом из другого скрипта

Всем привет, имею класс

197