.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 { } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д