NullReferenceException при чтении блоков файла - C#
Формулировка задачи:
Добрый день! подскажите еще такой вопрос считываю из файла строки(поблочно) все нормально считывал потом не с того невсего выдает ошибку - ополнительные сведения: Ссылка на объект не указывает на экземпляр объекта. на строчке string ReadBlock = voprosnik.SingleOrDefault(v => v.Number == i).VoprosText; уже пробывал проинициализировать везде, всеравно также, непойму в чем проблема(
вот пример файла:
****
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 тщ
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; } }
Решение задачи: «NullReferenceException при чтении блоков файла»
textual
Листинг программы
for (int i = 0; i < j; i++)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д