.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
    { }
 
}

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


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

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

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