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

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

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

Добрый день! подскажите еще такой вопрос считываю из файла строки(поблочно) все нормально считывал потом не с того невсего выдает ошибку - ополнительные сведения: Ссылка на объект не указывает на экземпляр объекта. на строчке string ReadBlock = voprosnik.SingleOrDefault(v => v.Number == i).VoprosText; уже пробывал проинициализировать везде, всеравно также, непойму в чем проблема(
Листинг программы
  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. List<Vopros> voprosnik = new List<Vopros>();
  4. string file = string.Empty;
  5.  
  6. Encoding windows1251 = Encoding.GetEncoding("Windows-1251");
  7. using (StreamReader reader = new StreamReader(@"D:\input.txt", windows1251))
  8. {
  9. file = reader.ReadToEnd();
  10. // reader.Close();
  11.  
  12. }
  13.  
  14. Encoding windows12512 = Encoding.GetEncoding("Windows-1251");
  15. StreamReader re = new StreamReader(@"D:\input.txt", windows12512);
  16. // foreach (int k in NumberBlock(re))
  17. // {
  18. //MessageBox.Show(k.ToString());
  19. // }
  20. int j = NumberBlock(re);
  21. string[] mas = file.Split(new string[] { "****" }, StringSplitOptions.RemoveEmptyEntries);
  22. Vopros vopros;
  23. foreach (string str in mas)
  24. {
  25. vopros = new Vopros(str.Trim());
  26. if (vopros.IsValid)
  27. {
  28. voprosnik = new List<Vopros>();
  29. voprosnik.Add(vopros);
  30. }
  31. }
  32. int shirina_textbox = Convert.ToInt32(txt_shirina.Text);
  33. int shirina_visota = Convert.ToInt32(txt_visota.Text);
  34. int kollizdAll = 0;
  35. for (int i = 1; i < j+1; i++)
  36. {
  37. //try
  38. //{
  39. // //voprosnik = new List<Vopros>();
  40. string ReadBlock = voprosnik.SingleOrDefault(v => v.Number == i).VoprosText;//проходим по блокам
  41. //int ShirinaIzd = Shirina(ReadBlock);
  42. //int VisotaIzd = Visota(ReadBlock);
  43. // MessageBox.Show(ShirinaIzd.ToString());
  44. //нормативы по изделия сколько изделий по толщине полезут в ящик
  45. if ((shirina_textbox >= Shirina(ReadBlock)) && (shirina_visota >= Visota(ReadBlock)))
  46. {
  47. MessageBox.Show(Shirina(ReadBlock).ToString());
  48. kollizdAll = kollizdAll + Kol_Izd(ReadBlock);
  49. lbl_kolizd.Text = "В данном заказе найдено: " + kollizdAll.ToString() + " количество изделий";
  50.  
  51. int Width_draw = 440;//ширина внутри ящика
  52. int Thickness_Probka = Thickness_SP(ReadBlock) + 3; // толщина изделия + пробка 3 мм
  53. int Raschet_izd = Width_draw / Thickness_Probka; // получили количество изделия в ящике
  54. int Shirina_product = Thickness_Probka * Raschet_izd;//ширина изделия должно быть <=440
  55. int Lenght_Ultimate = Visota(ReadBlock) + 250; //конечная длина изделия
  56. int Visota_Ultimate = Shirina(ReadBlock) + 100; // конечная высота изделия
  57.  
  58. // в лист боксе Длина(Lenght_Ultimate) по 1 изделю такая то //Длина по номенклатуре в количестве изделий и высотой*шириной = ......
  59. // по 42 = 9 изделий в ящик
  60. int gg = Shirina(ReadBlock);
  61. listBox_lengh.Items.Add("ДЛИНА " + "по " + Nomenklatura(ReadBlock) + " в количестве изделий: " + Kol_Izd(ReadBlock).ToString() + "c размерами " + (Visota(ReadBlock)).ToString()
  62. + "x"+gg.ToString() + "= " + Lenght_Ultimate);
  63. }
  64. public class Vopros
  65. {
  66. public int Number { get; set; }
  67. public bool IsValid { get; set; }
  68. public string VoprosText { get; set; }
  69. public Vopros(string text)
  70. {
  71. string[] mas = text.Split(new string[] { "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
  72. int num;
  73. IsValid = Int32.TryParse(mas[0], out num);
  74. if (!IsValid) return;
  75. Number = num;
  76. VoprosText = text;
  77. }
  78. }
вот пример файла: **** 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
Листинг программы
  1. for (int i = 0; i < j; i++)

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


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

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

7   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы