.NET 4.x Как определить тип элемента в ArrayList? - C#

Узнай цену своей работы

Формулировка задачи:

Есть класс абстрактный животные, от него наследуются 2 класса хищники и травоядные, от этих классов наследуются классы, волк, олень, заяц, лиса. В мейне создаются экземпляры четырех последних классов и добавляются в коллекцию ArrayList. Нужно определить колличество экземпляров каждого из классов в данной коллекции. Не могу понять как обратиться к итому элементу коллекции и определить тип этого элемента. Вот текст задания - Создать класс «животные», производные классы «хищники» и «травоядные», затем производные классы «волк», «лиса», «заяц», «олень». Содержимое класса – на собственное усмотрение. Создать массив объектов с произвольным количеством экземпляров всех указанных классов и подсчитать, сколько в массиве хищников и травоядных, волков, лис, зайцев и оленей 2.

Решение задачи: «.NET 4.x Как определить тип элемента в ArrayList?»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace _
  6. {
  7.     class Program
  8.     {
  9.         public static void Main()
  10.         {
  11.             List<Animal> animal = new List<Animal>
  12.             {
  13.                 new Wolf(),
  14.                 new Fox(),
  15.                 new Hare(),
  16.                 new Wolf(),
  17.                 new Fox(),
  18.                 new Hare(),
  19.                 new Deer(),
  20.                 new Hare(),
  21.                 new Deer(),
  22.                 new Deer(),
  23.                 new Hare(),
  24.                 new Deer(),
  25.                 new Fox(),
  26.                 new Hare(),
  27.             };
  28.  
  29.             // Если не переопределен ToString()
  30.             var type = animal.Select(a => a.ToString()).Select(a => Type.GetType(a));
  31.             var baseType = animal.Select(a => a.ToString()).Select(a => Type.GetType(a).BaseType);
  32.  
  33.             // но это лишнее, т.к. есть
  34.             var types = animal.Select(a => a.GetType());
  35.             var baseTypes = animal.Select(a => a.GetType().BaseType);
  36.  
  37.             Console.WriteLine(string.Join(" ", type));
  38.             Console.WriteLine(string.Join(" ", baseType));
  39.             Console.WriteLine(string.Join(" ", types));
  40.             Console.WriteLine(string.Join(" ", baseTypes));
  41.  
  42.             Console.WriteLine();
  43.  
  44.             var typp = animal.Select(a =>
  45.             new {
  46.                 type = a.GetType(),
  47.                 baseType = a.GetType().BaseType
  48.             })
  49.             .ToLookup(t=> t.baseType, t=>t.type);
  50.  
  51.             foreach(var t in typp)
  52.             {
  53.                 Console.WriteLine(t.Key);
  54.                 Console.WriteLine(string.Join(" ", t.Select(tt => tt)));
  55.             }
  56.             Console.WriteLine();
  57.  
  58.             // Ну и решение по ТЗ в одну строчку
  59.             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()}")))}")));
  60.  
  61.             Console.ReadLine();
  62.         }
  63.     }
  64.  
  65.     abstract class Animal
  66.     { }
  67.  
  68.     abstract class Predator : Animal
  69.     { }
  70.  
  71.     abstract class Herbivores : Animal
  72.     { }
  73.  
  74.     class Wolf : Predator
  75.     { }
  76.  
  77.     class Fox : Predator
  78.     { }
  79.  
  80.     class Hare : Herbivores
  81.     { }
  82.  
  83.     class Deer : Herbivores
  84.     { }
  85.  
  86. }

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


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

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

5   голосов , оценка 3.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы