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