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

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

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

У меня есть класс предок Entity, у него 4 наследника Artist, Picture, MuseumCollection, Shop. Есть функция isExist:
Листинг программы
  1. bool isExist(Entity entity, List<Entity> ObjectList)
  2. {
  3. foreach (Entity ent in ObjectList)
  4. {
  5. if (ent.Equals(entity)) return true;
  6. }
  7. return false;
  8.  
  9. }
Вопрос, как сделать так, чтобы в эту функцию можно было передать список типа Artist, Picture, MuseumCollection или Shop. Неужели копировать эту функцию 4 раза для разных типов списка? Вот полный код:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace PaintingHandBook.BL
  7. {
  8. public class Entity: IEquatable<Entity>
  9. {
  10. public string Name;
  11. public Entity(string Name)
  12. {
  13. this.Name = Name;
  14.  
  15. }
  16. public bool Equals(Entity obj)
  17. {
  18. return this.Name.Equals(obj.Name);
  19. }
  20.  
  21. }
  22. public class Picture:Entity
  23. {
  24. public Artist artist;
  25. private DateTime date;
  26. public string Genre;
  27.  
  28. public Picture(string Name,Artist artist, DateTime date, string Genre):base(Name)
  29. {
  30. this.artist = artist;
  31. this.date = date;
  32. this.Genre = Genre;
  33.  
  34. }
  35. }
  36. public class Artist:Entity
  37. {
  38. public List<Picture> pictures;
  39. public List<string> styles;
  40. public Artist(string Name, List<Picture> pictures, List<string> styles):base(Name)
  41. {
  42. this.pictures = pictures;
  43. this.styles = styles;
  44. }
  45. }
  46. public class MuseumCollection:Entity
  47. {
  48. public List<Picture> Pictures;
  49. public List<bool> isOriginalByKey;
  50. public MuseumCollection(string Name, List<Picture> Pictures, List<bool> isOriginalByKey):base(Name)
  51. {
  52. this.Pictures = Pictures;
  53. this.isOriginalByKey = isOriginalByKey;
  54. }
  55. }
  56. public class Shop:Entity
  57. {
  58. public DateTime Date;
  59. public List<Picture> Pictures;
  60. public List<double> PriceByKey;
  61. public Shop(string Name,DateTime date,List<Picture> pictures, List<double> priceByKey):base(Name)
  62. {
  63. this.Date = date;
  64. this.Pictures = pictures;
  65. this.PriceByKey = priceByKey;
  66.  
  67. }
  68. }
  69. public class phbModel
  70. {
  71. private List<Artist> allArtists;
  72. private List<Picture> allPictures;
  73. private List<MuseumCollection> allMuseumCollections;
  74. private List<Shop> allShops;
  75. public static bool isExist(Entity entity, List<Entity> ObjectList)
  76. {
  77. foreach (Entity ent in ObjectList)
  78. {
  79. if (ent.Equals(entity)) return true;
  80. }
  81. return false;
  82.  
  83. }
  84. public void AddArtist(string Name)
  85. {
  86. allArtists.Add(new Artist(Name,new List<Picture>(), new List<string>()));
  87. }
  88. public void AddPicture(string Name, Artist artist, DateTime date, string Genre)
  89. {
  90. allPictures.Add(new Picture(Name, artist, date, Genre));
  91. allPictures[allPictures.Count - 1].artist = artist;
  92. }
  93.  
  94. }
  95.  
  96. }

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

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

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


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

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

15   голосов , оценка 3.733 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы