Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 26

Поиск в элементах коллекции List<T>

25.06.2015, 21:20. Показов 3230. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно реализовать метод для подсчета определенных параметров, которые хранятся внутри элементов такой вот коллекции:

C#
1
2
3
4
5
6
7
8
9
10
11
List<LiveBeings> coll = new List<LiveBeings>();
 
            Horse h = new Horse();
            Dog d = new Dog();
            Crucian c = new Crucian();
            FishSmallfry f = new FishSmallfry();
 
            coll.Add(h);
            coll.Add(d);
            coll.Add(c);
            coll.Add(f);
Проблема в том что я могу оперировать элементами, но не пойму как получить доступ "внутрь" элементов коллекции coll
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.06.2015, 21:20
Ответы с готовыми решениями:

Поиск среднего значения в коллекции List
Извиняюсь, за то, что большинству мой вопрос покажется глупым, но я ним уже второй день копаюсь гугл особо не помогает, а срок уже...

Отображение в listBox поля элемента из коллекции коллекций List<List<>>
Есть карта в pictureBox-е. На ней мышкой ставяться флажки(маркеры). Нужно хранить их в БД с возможностью добавлять/удалять/изменять...

Подсчитать количество повторений по буквам в элементах коллекции
В коллекции , содержащей объекты типа &lt;String&gt;, подсчитать количество повторений по всем буквам ,которые встречались в элементах...

13
58 / 58 / 47
Регистрация: 16.09.2014
Сообщений: 158
25.06.2015, 21:51
Привет, может так попробовать:
C#
1
2
3
4
Console.WriteLine("Количество елементов:" + coll.Count);
//текущее содержимое
for(int i=0;i<coll.Count;i++)
Console.WriteLine(coll[i]);
0
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
25.06.2015, 21:52
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Collections.Generic;
 
namespace one
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var coll = new List<LiveBeings>();
 
            var h = new Horse();
            var h1 = new Horse();
            var d = new Dog();
            var c = new Crucian();
            var f = new FishSmallfry();
 
            coll.Add(h);
            coll.Add(h1);
            coll.Add(d);
            coll.Add(c);
            coll.Add(f);
 
            Console.WriteLine(coll.FindAll(n => n is Horse).Count);
        }
    }
 
    internal class FishSmallfry : LiveBeings
    {
    }
 
    internal class Crucian : LiveBeings
    {
    }
 
    internal class Dog : LiveBeings
    {
    }
 
    internal class Horse : LiveBeings
    {
    }
 
    internal class LiveBeings
    {
    }
}
https://msdn.microsoft.com/ru-... 10%29.aspx
1
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 26
26.06.2015, 17:16  [ТС]
Спасибо за идею буду "бодаться" дальше. Хочу еще понять как мне получить доступ к свойствам допустим того же "Horse" и манипулировать ими?
0
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
26.06.2015, 20:35
Доступ к чему к листу? У него есть индексатор
Он вернет вашу абстракцию которой можно манипулировать(например использовать свойства).
0
.NET C#,ASP.NET MVC
Эксперт .NET
 Аватар для lvlkoo
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
26.06.2015, 22:49
C#
1
2
Horse item = (Horse) list[i];
item.Property = "i am a horse";
1
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 26
27.06.2015, 06:33  [ТС]
Как реализовать метод что бы он автоматически перебирал элементы коллекции List<LiveBeings> и допустим нашел количество ног у всех членов этой коллекции? У рыб ног нет и соответственно нет свойства
C#
1
2
3
4
5
        int legs = 4;
        public int Feet()
        {
            return legs;
        }
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
27.06.2015, 10:47
Лучший ответ Сообщение было отмечено DenisVV как решение

Решение

DenisVV,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
        public class Program
    {
        public static void Main(string[] args)
        {
            var coll = new List<LiveBeings>();
            coll.Add(new Dog());
            coll.Add(new Dog());
            coll.Add(new Horse());
            coll.Add(new FishSmallfry());
 
            var list = coll.GetObjectsWithField("Legs");
            foreach (var e in list)
            {
                Console.WriteLine(e.GetType().Name);
            }
        }
 
 
   
    }
 
    static class FilterList
    {
        public static IEnumerable<T> GetObjectsWithField<T>(this List<T> list, String fieldName)
        {
            return list.Where(e => HasField(e, fieldName));
        }
 
        private static bool HasField<T>(T element, String fieldName)
        {
            Type t = element.GetType();
 
            return t.GetFields(BindingFlags.Public | BindingFlags.Instance).Any(f => f.Name == fieldName);
        }
    }
 
    internal class FishSmallfry : LiveBeings
    {
    }
 
    internal class Crucian : LiveBeings
    {
    }
 
    internal class Dog : LiveBeings
    {
        public int Legs = 4;
    }
 
    internal class Horse : LiveBeings
    {
        public int Legs = 4;
    }
 
    internal class LiveBeings
    {
    }
1
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 26
27.06.2015, 15:30  [ТС]
XRoy, Спасибо! А как можно найти количество ног? И можно ли находить типы элементов не по идентификатору поля, а то идентификатору метода?
0
18 / 18 / 9
Регистрация: 23.02.2015
Сообщений: 86
27.06.2015, 18:32
C#
1
Type t = element.GetType();
нужно получить коллекцию GetMethods() и из нее получить нужный метод
1
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 26
29.06.2015, 10:44  [ТС]
А как можно найти количество ног?
0
Warrior
 Аватар для _exp10der_
500 / 427 / 177
Регистрация: 23.11.2014
Сообщений: 932
29.06.2015, 21:13
Лучший ответ Сообщение было отмечено DenisVV как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
 
public class Program
{
    public static void Main(string[] args)
    {
        var coll = new List<LiveBeings>();
        coll.Add(new Dog());
        coll.Add(new Dog());
        coll.Add(new Horse());
        coll.Add(new FishSmallfry());
 
        var list = coll.GetObjectsWithField("Legs");
        foreach (var e in list)
        {
            Console.WriteLine(e.GetType().Name);
        }
 
        Console.WriteLine(list.Sum());
    }
}
 
internal static class FilterList
{
    public static int Sum(this IEnumerable<LiveBeings> source)
    {
        if (source == null)
            throw new ArgumentNullException("source");
        var num = 0;
        foreach (var leg in source.ToList().GetObjectsWithField("Legs"))
        {
            checked
            {
                num += ((dynamic) leg).Legs;
            }
        }
 
        return num;
    }
 
    public static IEnumerable<T> GetObjectsWithField<T>(this List<T> list, string fieldName)
    {
        return list.Where(e => HasField(e, fieldName));
    }
 
    private static bool HasField<T>(T element, string fieldName)
    {
        var t = element.GetType();
 
        return t.GetFields(BindingFlags.Public | BindingFlags.Instance).Any(f => f.Name == fieldName);
    }
}
 
internal class FishSmallfry : LiveBeings
{
}
 
internal class Crucian : LiveBeings
{
}
 
internal class Dog : LiveBeings
{
    public int Legs = 4;
}
 
internal class Horse : LiveBeings
{
    public int Legs = 4;
}
 
internal class LiveBeings
{
}
сумму чтоли?
1
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 26
29.06.2015, 21:31  [ТС]
Спасибо всем. Инфа в массы
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
01.07.2015, 13:40
DenisVV,
Более универсальным сделал код _exp10der_,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
     public class Program
    {
        public static void Main(string[] args)
        {
            var coll = new List<LiveBeings>();
            coll.Add(new Dog());
            coll.Add(new Dog());
            coll.Add(new Horse());
            coll.Add(new FishSmallfry());
 
            var list = coll.GetObjectsWithField("Legs").ToList();
            foreach (var e in list)
            {
                Console.WriteLine(e.GetType().Name);
            }
 
            Console.WriteLine("Ног {0}", list.Sum("Legs"));
            Console.WriteLine("Хвостов {0}", list.Sum("Tail"));
        }
    }
 
    static class FilterList
    {
        public static int Sum(this IEnumerable<LiveBeings> source, string field)
        {
            if (source == null)
                throw new ArgumentNullException("source");
 
            var num =
                source.GetObjectsWithField(field).Sum(leg => (int) (dynamic) leg.GetType().GetField(field).GetValue(leg));
 
            return num;
        }
 
        public static IEnumerable<T> GetObjectsWithField<T>(this IEnumerable<T> list, string fieldName)
        {
            return list.Where(e => HasField(e, fieldName));
        }
 
        private static bool HasField<T>(T element, string fieldName)
        {
            var t = element.GetType();
 
            return t.GetFields(BindingFlags.Public | BindingFlags.Instance).Any(f => f.Name == fieldName);
        }
    }
 
    class FishSmallfry : LiveBeings
    {
        public int Tail = 1;
    }
 
    class Crucian : LiveBeings
    {
        public int Tail = 1;
    }
 
    class Dog : LiveBeings
    {
        public int Legs = 4;
        public double Tail = 1;
    }
 
    class Horse : LiveBeings
    {
        public int Legs = 4;
        public long Tail = 1;
    }
 
    abstract class LiveBeings { }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.07.2015, 13:40
Помогаю со студенческими работами здесь

Найти максимальную разницу времени между соседними объектами в первых 5-ти элементах коллекции
Добрый день! С Linq работал не очень много, поэтому прошу помощи профессионалов. Создана коллекция sequences, каждый элемент...

Поиск в List<List<string>>: поиск по части строки
Здравствуйте. Надо реализовать поиск по части строки. Т.е. у меня есть List объектов List&lt;string&gt;, по введенной строке надо...

коллекции List<T>
Всем здрасте! к примеру, есть типиизованный список List&lt;T&gt; Items = new List&lt;T&gt;(); добавляем туда какой нибудь элемент ...

Сортировка коллекции List
Здравствуйте! Надо отсортировать коллекцию List студентов по уменьшению среднего балла. Если одинаковый балл - сортировать по фамилии....

Сериализация коллекции List<T>
Необходимо сериализовать коллекцию List&lt;FileInfo&gt; для передачи от сервера к клиенту. Как это возможно сделать и есть ли способ без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru