Проверка наличия объекта в классе - 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 + " в списке нет");
        }

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


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

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

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