.NET 4.x Как определить тип элемента в ArrayList? - C#
Формулировка задачи:
Есть класс абстрактный животные, от него наследуются 2 класса хищники и травоядные, от этих классов наследуются классы, волк, олень, заяц, лиса. В мейне создаются экземпляры четырех последних классов и добавляются в коллекцию ArrayList. Нужно определить колличество экземпляров каждого из классов в данной коллекции. Не могу понять как обратиться к итому элементу коллекции и определить тип этого элемента. Вот текст задания -
Создать класс «животные», производные классы «хищники» и «травоядные», затем производные классы
«волк», «лиса», «заяц», «олень». Содержимое класса – на собственное усмотрение. Создать массив
объектов с произвольным количеством экземпляров всех указанных классов и подсчитать, сколько в
массиве хищников и травоядных, волков, лис, зайцев и оленей 2.
Решение задачи: «.NET 4.x Как определить тип элемента в ArrayList?»
textual
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace _
- {
- class Program
- {
- public static void Main()
- {
- List<Animal> animal = new List<Animal>
- {
- new Wolf(),
- new Fox(),
- new Hare(),
- new Wolf(),
- new Fox(),
- new Hare(),
- new Deer(),
- new Hare(),
- new Deer(),
- new Deer(),
- new Hare(),
- new Deer(),
- new Fox(),
- new Hare(),
- };
- // Если не переопределен ToString()
- var type = animal.Select(a => a.ToString()).Select(a => Type.GetType(a));
- var baseType = animal.Select(a => a.ToString()).Select(a => Type.GetType(a).BaseType);
- // но это лишнее, т.к. есть
- var types = animal.Select(a => a.GetType());
- var baseTypes = animal.Select(a => a.GetType().BaseType);
- Console.WriteLine(string.Join(" ", type));
- Console.WriteLine(string.Join(" ", baseType));
- Console.WriteLine(string.Join(" ", types));
- Console.WriteLine(string.Join(" ", baseTypes));
- Console.WriteLine();
- var typp = animal.Select(a =>
- new {
- type = a.GetType(),
- baseType = a.GetType().BaseType
- })
- .ToLookup(t=> t.baseType, t=>t.type);
- foreach(var t in typp)
- {
- Console.WriteLine(t.Key);
- Console.WriteLine(string.Join(" ", t.Select(tt => tt)));
- }
- Console.WriteLine();
- // Ну и решение по ТЗ в одну строчку
- Console.WriteLine(string.Join(Environment.NewLine, typp.Select(t => $"{t.Key} {t.Count()}{Environment.NewLine}{(string.Join(" ", t.GroupBy(tt=>tt).Select(tt=> $"{tt.Key} {tt.Count()}")))}")));
- Console.ReadLine();
- }
- }
- abstract class Animal
- { }
- abstract class Predator : Animal
- { }
- abstract class Herbivores : Animal
- { }
- class Wolf : Predator
- { }
- class Fox : Predator
- { }
- class Hare : Herbivores
- { }
- class Deer : Herbivores
- { }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д