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

Перебор экземпляров класса через foreach в List<MyClass>

07.04.2018, 00:23. Показов 8081. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вроде бы элементарная задача, но что-то не так. Почему на консоль выводиться один и тот же экземпляр?
Почему foreach не проходит по всем элементам списка?

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
    class Program
    {
        static void Main(string[] args)
        {
            List<Fighter> fighters = new List<Fighter>();
            { 
            for (int i = 0; i < 5; i++)
                fighters.Add(new Fighter());
            }
            foreach (Fighter f in fighters)
            {
                Console.WriteLine($"{f.Name} {f.Age}");
            }
 
            Console.ReadKey();
        }
    }
 
    public class Fighter
    {
        public string Name;
        public int Age;
 
        public Fighter()
        {
            string[] RndName = { "Smoke", "Scorpion", "Syrax", "Sub-Zero" };
            int[] RndAge = { 32, 29, 39, 33, 28, 31 };
            Random rnd = new Random();
            Name = RndName[rnd.Next(0, RndName.Length)];
            Age = RndAge[rnd.Next(0, RndAge.Length)];
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.04.2018, 00:23
Ответы с готовыми решениями:

Перебрать List<MyClass> со вложенными списками List<MyClass> в каждом элементе
Есть древовидная структура вида: List&lt;MyClass&gt; myClassList; //... public class MyClass{ public List&lt;MyClass&gt;...

Перебор экземпляров класса
здравствуйте. вот, допустим, у меня в игре есть 3 юнита. (они в виде экземпляров одного класса) . каким образом можно перебрать по...

Перебор всех экземпляров класса
Ребятушки, подскажите как да что. Как &quot;найти&quot; все экземпляры класса &quot;X&quot;? Допустим есть у меня класс машины. Есть несколько его...

7
15 / 15 / 16
Регистрация: 19.07.2017
Сообщений: 61
07.04.2018, 00:37
Alone11, запустил код, вот результат

В чем проблема?
Миниатюры
Перебор экземпляров класса через foreach в List<MyClass>  
0
15 / 15 / 16
Регистрация: 19.07.2017
Сообщений: 61
07.04.2018, 00:43
это если под отладкой запускать, то так, а если без нее, то список с одинаковыми экземплярами, тут дело не в foreach
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
07.04.2018, 00:50
Лучший ответ Сообщение было отмечено Alone11 как решение

Решение

Цитата Сообщение от lemon4er Посмотреть сообщение
дело не в foreach
Да. Дело в объекте класса Random, который создается в цикле при одном значении времени.
Попробуйте:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Fighter
{
    public string Name;
    public int Age;
    static Random rnd = new Random();
    public Fighter()
    {
        string[] RndName = { "Smoke", "Scorpion", "Syrax", "Sub-Zero" };
        int[] RndAge = { 32, 29, 39, 33, 28, 31 };
        Name = RndName[rnd.Next(0, RndName.Length)];
        Age = RndAge[rnd.Next(0, RndAge.Length)];
    }
}
2
15 / 15 / 16
Регистрация: 19.07.2017
Сообщений: 61
07.04.2018, 00:57
Даценд, хмм, хитрая штука
0
4 / 4 / 0
Регистрация: 14.10.2017
Сообщений: 85
07.04.2018, 01:06  [ТС]
Дацент, огромное спасибо. Если вам не сложно, можете более подробно раскрыть в чем причина? Как может в одно и тоже время создаваться обьект Random? И почему так происходит?
0
 Аватар для Fleder
263 / 224 / 108
Регистрация: 09.12.2015
Сообщений: 652
07.04.2018, 08:56
Лучший ответ Сообщение было отмечено Даценд как решение

Решение

Цитата Сообщение от Alone11 Посмотреть сообщение
Как может в одно и тоже время создаваться обьект Random? И почему так происходит?
Это особенности работы генератора псевдослучайной последовательности:
То есть, если, например, два разных экземпляра класса Random создать в коде в разное время,
но создать их с помощью конструктора public Random(int seed) и указать одно и то же
значение seed, то они будут генерировать одинаковые числа.

В вашем же коде вы используете конструктор класса Random без параметров, но если посмотреть,
как он устроен, то внутри он вызывает всё тот же конструктор с параметром:
public Random() : this(Environment.TickCount) {}
А Environment.TickCount() - это количество миллисекунд, прошедших с начала включения компуктера.

И что получается: вы создаёте в своём коде экземпляры рандома (в цикле, в конструкторе каждого класса Fighter),
но это происходит так быстро, что укладывается в период куда меньше одной миллисекунды.
Отсюда и имеем рандомы, инициализированные одним значением количества миллисекунд.
Эти "рандомы-клоны" в дальнейшем и ведут себя одинаково.
2
4 / 4 / 0
Регистрация: 14.10.2017
Сообщений: 85
07.04.2018, 13:50  [ТС]
Fleder, огромное спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.04.2018, 13:50
Помогаю со студенческими работами здесь

Перебор элементов xml через foreach
Есть документ xml: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;Users&gt; &lt;User ID=&quot;5047036703&quot;&gt; &lt;Pass&gt;615668&lt;/Pass&gt; ...

Как изменить свойство элемента в list? List<MyClass>
В list содержится класс MyClass у которого есть свойства, как изменить у элемента в list требуемое свойство? Например: class...

Универсальное преобразование List<object> -> List<MyClass>
Пытаюсь написать нечто универсальное для преобразования сущностей из БД (таблицы) в сущности C# (классы). /// &lt;summary&gt; ...

Как вывести List<> через .ForEach?
Нужно вывести в listBox'ы значения из ss.Season и ss.Seria... Помогите) List&lt;SS&gt; serialList = new List&lt;SS&gt;() { new...

Преобразование List<MyClass> to List<Object>
собственно ловлю ошибку при преобразовании списка состоящего из экземпляров моего класса в List&lt;Object&gt; пытаюсь сделать такое ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки 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. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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