Поиск в элементах коллекции List - C#

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

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

Как можно реализовать метод для подсчета определенных параметров, которые хранятся внутри элементов такой вот коллекции:
Листинг программы
  1. List<LiveBeings> coll = new List<LiveBeings>();
  2. Horse h = new Horse();
  3. Dog d = new Dog();
  4. Crucian c = new Crucian();
  5. FishSmallfry f = new FishSmallfry();
  6. coll.Add(h);
  7. coll.Add(d);
  8. coll.Add(c);
  9. coll.Add(f);
Проблема в том что я могу оперировать элементами, но не пойму как получить доступ "внутрь" элементов коллекции coll

Решение задачи: «Поиск в элементах коллекции List»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection;
  5.  
  6. public class Program
  7. {
  8.     public static void Main(string[] args)
  9.     {
  10.         var coll = new List<LiveBeings>();
  11.         coll.Add(new Dog());
  12.         coll.Add(new Dog());
  13.         coll.Add(new Horse());
  14.         coll.Add(new FishSmallfry());
  15.  
  16.         var list = coll.GetObjectsWithField("Legs");
  17.         foreach (var e in list)
  18.         {
  19.             Console.WriteLine(e.GetType().Name);
  20.         }
  21.  
  22.         Console.WriteLine(list.Sum());
  23.     }
  24. }
  25.  
  26. internal static class FilterList
  27. {
  28.     public static int Sum(this IEnumerable<LiveBeings> source)
  29.     {
  30.         if (source == null)
  31.             throw new ArgumentNullException("source");
  32.         var num = 0;
  33.         foreach (var leg in source.ToList().GetObjectsWithField("Legs"))
  34.         {
  35.             checked
  36.             {
  37.                 num += ((dynamic) leg).Legs;
  38.             }
  39.         }
  40.  
  41.         return num;
  42.     }
  43.  
  44.     public static IEnumerable<T> GetObjectsWithField<T>(this List<T> list, string fieldName)
  45.     {
  46.         return list.Where(e => HasField(e, fieldName));
  47.     }
  48.  
  49.     private static bool HasField<T>(T element, string fieldName)
  50.     {
  51.         var t = element.GetType();
  52.  
  53.         return t.GetFields(BindingFlags.Public | BindingFlags.Instance).Any(f => f.Name == fieldName);
  54.     }
  55. }
  56.  
  57. internal class FishSmallfry : LiveBeings
  58. {
  59. }
  60.  
  61. internal class Crucian : LiveBeings
  62. {
  63. }
  64.  
  65. internal class Dog : LiveBeings
  66. {
  67.     public int Legs = 4;
  68. }
  69.  
  70. internal class Horse : LiveBeings
  71. {
  72.     public int Legs = 4;
  73. }
  74.  
  75. internal class LiveBeings
  76. {
  77. }

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


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

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

10   голосов , оценка 3.9 из 5

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

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

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