Передать в функцию список объектов наследников вместо предка - 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;
}