Проверка наличия объекта в классе - C#
Формулировка задачи:
Здравствуйте. Возникла проблема с методом поиска. При запуске проги создаю массив, заполняю его объектами трех классов. Поиск у меня должен работать только по объектам класса Инструмент. Но если я не ввожу объект класса Инструмент при заполнении массива, а потом вызываю поиск, то прога крашится, потому что нет объекта этого класса(как мне кажется, что наверняка и есть). Как мне в этом методе поиска проверить, существуют ли объекты нужного класса и если их нет - вывести соответствующее сообщение. Или может какой другой способ борьбы с этим предложите?
Листинг программы
- using System;
- namespace CIW
- {
- abstract class City
- {
- public string instrument { get; set; }
- public abstract void Input();
- public abstract void Output();
- }
- class Store : City
- {
- string name;
- public string getName(){ return name;}
- public void setName( string n){name = n;}
- string adress;
- public string getAdress(){ return adress;}
- public void setAdress( string a){adress=a;}
- int oNumber;
- public int ONumber
- {
- get{ return oNumber;}
- set { oNumber = value;}
- }
- public override void Input()
- {
- Console.Write("Введите название магазина: ");
- name = Console.ReadLine();
- Console.Write("Введите адрес: ");
- adress = Console.ReadLine();
- Console.Write("Введите количество отделов: ");
- oNumber = int.Parse(Console.ReadLine());
- }
- public override void Output()
- {
- Console.WriteLine ("Магазин: ");
- Console.WriteLine ("Название: {0}\nАдрес: {1}\nКоличество отделов: {2}\n", name, adress, oNumber);
- Console.WriteLine ("-----------------");
- }
- }
- class Otdel : City
- {
- string name;
- public string getName(){ return name;}
- public void setName( string n){name = n;}
- int iNumber;
- public int INumber
- {
- get{ return iNumber;}
- set { iNumber = value;}
- }
- string date;
- public string getDate(){ return date;}
- public void setDate( string d){date = d;}
- public override void Input()
- {
- Console.Write("Введите название: ");
- name = Console.ReadLine();
- Console.Write("Введите количество наименований: ");
- iNumber = int.Parse(Console.ReadLine());
- Console.Write("Введите дату создания отдела: ");
- date = Console.ReadLine();
- }
- public override void Output()
- {
- Console.WriteLine ("Отдел");
- Console.WriteLine ("Название: {0}\nКоличество наименований инструментов: {1}\nДата создания отдела: {2}\n", name, iNumber, date);
- Console.WriteLine ("-----------------");
- }
- }
- class Instrument : City
- {
- string name;
- public string getName(){ return name;}
- public void setName( string n){name=n;}
- int price;
- public int Price
- {
- get{ return price;}
- set { price= value;}
- }
- int number;
- public int Number
- {
- get{ return number;}
- set { number = value;}
- }
- public override void Input()
- {
- Console.Write("Введите название: ");
- name = Console.ReadLine ();
- Console.Write("Введите цену: ");
- price = int.Parse(Console.ReadLine());
- Console.Write("Введите количество: ");
- number = int.Parse(Console.ReadLine());
- }
- public override void Output()
- {
- Console.WriteLine ("Инструмент");
- Console.WriteLine ("Название: {0}\nЦена: {1}\nКоличество: {2}\n", name, price, number);
- Console.WriteLine ("-----------------");
- }
- }
- class Methods
- {
- public static void nMass(ref City[] mass)
- {
- Console.Write("Введите размер массива: ");
- int n = int.Parse(Console.ReadLine());
- mass = new City[n];
- for (int i = 0; i < n; i++)
- mass[i] = new Store();
- }
- public static void Enter(City[] mass)
- {
- int n;
- for (int i = 0; i < mass.Length; i++)
- {
- Console.Write("1 - Магазин\n2 - Отдел\n3 - Инструмент\n");
- n = int.Parse(Console.ReadLine());
- if (n == 1)
- {
- Store obj = new Store();
- obj.Input();
- mass[i] = obj;
- }
- else if (n == 2)
- {
- Otdel obj = new Otdel();
- obj.Input ();
- mass[i] = obj;
- }
- else if (n == 3)
- {
- Instrument obj = new Instrument();
- obj.Input ();
- mass[i] = obj;
- }
- }
- }
- public static void Out(City[] mass)
- {
- for (int i = 0; i < mass.Length; i++)
- mass[i].Output();
- }
- public static void Find(City[] mass)
- {
- Console.WriteLine("Введите название инструмента: ");
- string st = Console.ReadLine();
- for (int i = 0; i < mass.Length; i++)
- if (st.CompareTo(((Instrument)mass[i]).getName()) == 0)
- {
- mass[i].Output ();
- return;
- }
- Console.WriteLine(st + " в списке нет");
- }
- }
- class Program
- {
- static void Main()
- {
- City[] mass = new City[] { new Store() };
- while (true)
- {
- Console.Write("1 - Создание массива\n2 - Ввод данных\n3 - Вывод на экран\n4 - Поиск\n5 - Выход\n");
- switch (Console.ReadLine())
- {
- case "1": Methods.nMass(ref mass); break;
- case "2": Methods.Enter(mass); break;
- case "3": Methods.Out(mass); break;
- case "4": Methods.Find(mass); break;
- case "5": return;
- }
- }
- }
- }
- }
Решение задачи: «Проверка наличия объекта в классе»
textual
Листинг программы
- public static void Find(City[] mass)
- {
- Console.WriteLine("Введите название инструмента: ");
- string st = Console.ReadLine();
- for (int i = 0; i < mass.Length; i++)
- {
- var instrument = mass[i] as Instrument;
- if (instrument != null && instrument.getName() == st)
- {
- mass[i].Output ();
- return;
- }
- }
- Console.WriteLine(st + " в списке нет");
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д