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