Передать в функцию список объектов наследников вместо предка - C#

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

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

У меня есть класс предок Entity, у него 4 наследника Artist, Picture, MuseumCollection, Shop. Есть функция isExist:
 bool isExist(Entity entity, List<Entity> ObjectList)
        {
 
            foreach (Entity ent in ObjectList)
            {
                if (ent.Equals(entity)) return true;
 
            }
            return false;

        }
Вопрос, как сделать так, чтобы в эту функцию можно было передать список типа Artist, Picture, MuseumCollection или Shop. Неужели копировать эту функцию 4 раза для разных типов списка? Вот полный код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace PaintingHandBook.BL
{
 
    public class Entity: IEquatable<Entity>
    {
        public string Name;
 
        public Entity(string Name)
        {
            this.Name = Name;

        }
        public bool Equals(Entity obj)
        {
            return this.Name.Equals(obj.Name);
 
        }

    }
    public class Picture:Entity
    {
 
        public Artist artist;
        private DateTime date;
        public string Genre;

        public Picture(string Name,Artist artist, DateTime date, string Genre):base(Name)
        {
            this.artist = artist;
            this.date = date;
            this.Genre = Genre;

        }
    }
    public class Artist:Entity
    {
        public List<Picture> pictures;
        public List<string> styles;
        public Artist(string Name, List<Picture> pictures, List<string> styles):base(Name)
        {
            this.pictures = pictures;
            this.styles = styles;
        }
    }
 
    public class MuseumCollection:Entity
    {
 
        public List<Picture> Pictures;
        public List<bool> isOriginalByKey;
        public MuseumCollection(string Name, List<Picture> Pictures, List<bool> isOriginalByKey):base(Name)
        {
            this.Pictures = Pictures;
            this.isOriginalByKey = isOriginalByKey;
 
        }
    }
    public class Shop:Entity
      {
 
        public DateTime Date;
        public List<Picture> Pictures;
        public List<double> PriceByKey;
        public Shop(string Name,DateTime date,List<Picture> pictures, List<double> priceByKey):base(Name)
        {
            this.Date = date;
            this.Pictures = pictures;
            this.PriceByKey = priceByKey;

        }
    }
    public class phbModel
    {
        private List<Artist> allArtists;
        private List<Picture> allPictures;
        private List<MuseumCollection> allMuseumCollections;
        private List<Shop> allShops;
 
        public static bool isExist(Entity entity, List<Entity> ObjectList)
        {
 
            foreach (Entity ent in ObjectList)
            {
                if (ent.Equals(entity)) return true;
 
            }
            return false;

        }
        public void AddArtist(string Name)
        {
            allArtists.Add(new Artist(Name,new List<Picture>(), new List<string>()));
 
        }
 
        public void AddPicture(string Name, Artist artist, DateTime date, string Genre)
        {
            allPictures.Add(new Picture(Name, artist, date, Genre));
            allPictures[allPictures.Count - 1].artist = artist;
 
        }

    }

    }

Решение задачи: «Передать в функцию список объектов наследников вместо предка»

textual
Листинг программы
        public static bool isExist<T>(T entity, List<T> ObjectList) where T: IEquatable<Entity>
        {
            foreach (IEquatable<T> ent in ObjectList)
            {
                if (ent.Equals(entity)) return true;
 
            }
            return false;
        }

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


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

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

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