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++)