Передать в функцию список объектов наследников вместо предка - C#
Формулировка задачи:
У меня есть класс предок Entity, у него 4 наследника Artist, Picture, MuseumCollection, Shop.
Есть функция isExist:
Вопрос, как сделать так, чтобы в эту функцию можно было передать список типа Artist, Picture, MuseumCollection или Shop.
Неужели копировать эту функцию 4 раза для разных типов списка?
Вот полный код:
Листинг программы
- bool isExist(Entity entity, List<Entity> ObjectList)
- {
- foreach (Entity ent in ObjectList)
- {
- if (ent.Equals(entity)) return true;
- }
- return false;
- }
Листинг программы
- 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д