NullReferenceException при чтении блоков файла - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! подскажите еще такой вопрос считываю из файла строки(поблочно) все нормально считывал потом не с того невсего выдает ошибку - ополнительные сведения: Ссылка на объект не указывает на экземпляр объекта. на строчке string ReadBlock = voprosnik.SingleOrDefault(v => v.Number == i).VoprosText; уже пробывал проинициализировать везде, всеравно также, непойму в чем проблема(
 private void button1_Click(object sender, EventArgs e)
        {
 
  List<Vopros> voprosnik = new List<Vopros>();
            string file = string.Empty;

            Encoding windows1251 = Encoding.GetEncoding("Windows-1251");
            using (StreamReader reader = new StreamReader(@"D:\input.txt", windows1251))
            {
                file = reader.ReadToEnd();
               // reader.Close();

            }

            Encoding windows12512 = Encoding.GetEncoding("Windows-1251");
            StreamReader re = new StreamReader(@"D:\input.txt", windows12512);
           // foreach (int k in NumberBlock(re))
           // {
                //MessageBox.Show(k.ToString());
          //  }
            int j = NumberBlock(re);
      
            string[] mas = file.Split(new string[] { "****" }, StringSplitOptions.RemoveEmptyEntries);
            Vopros vopros;
            foreach (string str in mas)
            {
                vopros = new Vopros(str.Trim());
                if (vopros.IsValid)
                {
                    voprosnik = new List<Vopros>();
                    voprosnik.Add(vopros);
                  
                }
            }
 
                int shirina_textbox = Convert.ToInt32(txt_shirina.Text);
                int shirina_visota = Convert.ToInt32(txt_visota.Text);
 
                int kollizdAll = 0;
 
                for (int i = 1; i < j+1; i++)
                {
                    //try
                    //{
                    //    //voprosnik = new List<Vopros>();
                        string ReadBlock = voprosnik.SingleOrDefault(v => v.Number == i).VoprosText;//проходим по блокам
                        //int ShirinaIzd = Shirina(ReadBlock);
                        //int VisotaIzd = Visota(ReadBlock);
                        // MessageBox.Show(ShirinaIzd.ToString());
                        //нормативы по изделия сколько изделий по толщине полезут в ящик
 
                        if ((shirina_textbox >= Shirina(ReadBlock)) && (shirina_visota >= Visota(ReadBlock)))
                        {
                            MessageBox.Show(Shirina(ReadBlock).ToString());
 
                            kollizdAll = kollizdAll + Kol_Izd(ReadBlock);
                            lbl_kolizd.Text = "В данном заказе найдено: " + kollizdAll.ToString() + " количество изделий";

                            int Width_draw = 440;//ширина внутри ящика
                            int Thickness_Probka = Thickness_SP(ReadBlock) + 3; // толщина изделия + пробка 3 мм
                            int Raschet_izd = Width_draw / Thickness_Probka; // получили количество изделия в ящике
                            int Shirina_product = Thickness_Probka * Raschet_izd;//ширина изделия должно быть <=440
                            int Lenght_Ultimate = Visota(ReadBlock) + 250; //конечная длина изделия
                            int Visota_Ultimate = Shirina(ReadBlock) + 100; // конечная высота изделия

                            // в лист боксе Длина(Lenght_Ultimate) по 1 изделю такая то //Длина по номенклатуре в количестве изделий и высотой*шириной = ......  
                            // по 42 = 9 изделий в ящик
 
                            int gg = Shirina(ReadBlock);
 
                            listBox_lengh.Items.Add("ДЛИНА " + "по " + Nomenklatura(ReadBlock) + " в количестве изделий: " + Kol_Izd(ReadBlock).ToString() + "c размерами " + (Visota(ReadBlock)).ToString()
                                + "x"+gg.ToString() + "= " + Lenght_Ultimate);
 
        }
        public class Vopros
        {
            public int Number { get; set; }
            public bool IsValid { get; set; }
            public string VoprosText { get; set; }
 
            public Vopros(string text)
            {
                string[] mas = text.Split(new string[] { "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
                int num;
                IsValid = Int32.TryParse(mas[0], out num);
                if (!IsValid) return;
                Number = num;
                VoprosText = text;
            }
        }
вот пример файла: **** 1 1 блок Номенклатура: 32 СПО 6 зак-20-6 зак ном Высота: 1001 вмм Ширина: 1022 шмм Количество изделий: 1 шт ОбщаяПлощадь: 0,57 ОбщийВес: 17,1 Толщина изделия: 42 тщ **** 2 2 блок Номенклатура: 32 СПО 6 зак-20-6 зак ном Высота: 1000 вмм Ширина: 1049 шмм Количество изделий: 5 шт ОбщаяПлощадь: 0,61 ОбщийВес: 18,3 Толщина изделия: 42 тщ **** 3 3 блок Номенклатура: 32 СПО 6 зак-20-6 зак ном Высота: 1000 вмм Ширина: 1048 шмм Количество изделий: 5 шт ОбщаяПлощадь: 0,61 ОбщийВес: 18,3 Толщина изделия: 42 тщ

Решение задачи: «NullReferenceException при чтении блоков файла»

textual
Листинг программы
for (int i = 0; i < j; i++)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы