Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/55: Рейтинг темы: голосов - 55, средняя оценка - 4.53
1 / 1 / 0
Регистрация: 24.11.2017
Сообщений: 36
1

Передача обьекта класса в List

31.01.2018, 23:09. Показов 9944. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Может кто подскажет, как в классе передать объект в list?


Поле клсса
C#
1
List<Album> AlbumCollections=new List<Album>(1);
Конструктор класса
C#
1
2
3
4
5
6
7
8
9
10
11
12
   public Album(string Sign, string Name, int Year)
        {
            this.signer = Sign;
            this.name = Name;
            this.year = Year;
            song = new Song[1];
            AlbumCollections.Add(  ???  );
          
 
            
                     
        }
Нужно сделать так, чтобы при создании объекта Album, этот объект записывался сразу в list
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2018, 23:09
Ответы с готовыми решениями:

Передача обьекта из класса в класс формы, Передача обьекта из класса в класс формы
Здравствуйте! У меня есть класс в отдельной MyClass.cs и клас формы Form1.cs. Как мне из сласса...

Сортировка List по классу обьекта
есть родительский класс class ClientBasic { private double energy; private...

Вывод обьекта List<Port>()
недавно помогли с проблемой(https://www.cyberforum.ru/csharp-net/thread1389129.html#post7308453) ...

List содержащий компоненты игрового обьекта
как можно сделать чтоб внутри класса GameObject можно было хранить массив или список наследников...

16
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
31.01.2018, 23:52 2
C#
1
AlbumCollections.Add(this);
Добавлено через 3 минуты
Только тогда поле, где храниться сам список, должно быть статичным. Иначе для каждого объекта Album будет своя коллекция из одного элемента
0
4 / 4 / 2
Регистрация: 07.10.2015
Сообщений: 43
01.02.2018, 00:56 3
Пока писал, уже ответили)
Вот пример кода:
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
class Program
    {
        static List<Album> alb;
        [STAThread]
        static void Main(string[] args)
        {
            alb = new List<Album>();
            Album a = new Album("11", "sdf", 2231);
            Album b = new Album("22", "qwe", 2231);
            Album c = new Album("33", "asdf", 2231);
            Album d = new Album("44", "hhh", 2231);
 
        }
        public class Album
        {
            public string signer { get; set; }
            public string name { get; set; }
            public int year { get; set; }
            
            public Album(string Sign, string Name, int Year) 
            {
               //var al =  new Album();
                this.signer = Sign;
                this.name = Name;
                this.year = Year;
 
                alb.Add(this);
            }
        }
    }
0
3560 / 2501 / 1174
Регистрация: 14.08.2016
Сообщений: 8,206
01.02.2018, 01:02 4
правильно сделать из этого 2 класса, один альбом, второй хранилище этого всего
0
1519 / 462 / 126
Регистрация: 09.01.2018
Сообщений: 1,094
01.02.2018, 04:01 5
Hander222, вообще это в корне неправильно. Задача конструктора создавать объект. А добавлять созданный объект куда либо должен метод класса, управляющего коллекцией.
1
4 / 4 / 2
Регистрация: 07.10.2015
Сообщений: 43
01.02.2018, 08:28 6
Это все правильно, надо разделять ответственности, конструктор для создания, метод для действия, но задачка стоит: "Нужно сделать так, чтобы при создании объекта Album, этот объект записывался сразу в list". Вот и предложили возможное решение.
Да, не красивое, но рабочее. Если есть лучше вариант - в студию - любопытно)
0
HF
1163 / 749 / 181
Регистрация: 09.09.2011
Сообщений: 2,314
Записей в блоге: 2
01.02.2018, 09:25 7
Цитата Сообщение от Tiger Посмотреть сообщение
"Нужно сделать так, чтобы при создании объекта Album, этот объект записывался сразу в list". Вот и предложили возможное решение.
Вот и сделайте его создание через нужный класс.
Цитата Сообщение от escoult Посмотреть сообщение
А добавлять созданный объект куда либо должен метод класса, управляющего коллекцией.
Он вам будет и объект создавать (и возвращать если нужно) и с коллекцией работать.
0
1 / 1 / 0
Регистрация: 24.11.2017
Сообщений: 36
01.02.2018, 12:47  [ТС] 8
Мне по задаче, нужно в классе использовать класс коллекций. Я просто воспользуюсь первым вариантом (this) ) в принципе, будет нормально . Спасибо
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
01.02.2018, 13:46 9
Hander222, "в принципе" не очень правильный подход. Лучше выложить текст исходной задачи без авторских интерпретаций. Текущее решение с большой долей вероятности не является грамотным
0
1 / 1 / 0
Регистрация: 24.11.2017
Сообщений: 36
01.02.2018, 16:36  [ТС] 10
КОП, собственно, я попросил помощи ) другого варианта не подкинули . Объект создаётся через конструктор. Если через метод записывать в лист, то этот метод надо ещё вызывать, а это мне не нужно. Как по-другому реализовать ?
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
01.02.2018, 16:56 11
Цитата Сообщение от Hander222 Посмотреть сообщение
а это мне не нужно.
это лень? лишняя строчка?
Цитата Сообщение от Hander222 Посмотреть сообщение
другого варианта не подкинули
Цитата Сообщение от Hander222 Посмотреть сообщение
Как по-другому реализовать ?
ответы 4,5,7. Но как я сказал выше, это догадки, так как никто не знает изначального текста. Тупо копипастой, без своих пересказов.
0
[Bicycle Reinventor]
332 / 270 / 109
Регистрация: 19.10.2011
Сообщений: 668
Записей в блоге: 2
01.02.2018, 16:59 12
Конструктор сделать приватным, вместо него использовать new instance паттерн, и в нём делать всё, что вам надо - добавлять в коллекции, выводить логи, запускать спутники, whatever.
0
1 / 1 / 0
Регистрация: 24.11.2017
Сообщений: 36
01.02.2018, 17:35  [ТС] 13
КОП, не нужно , не потому что лень писать, а потому что преподаватель сказал, что при создании объекта, сразу объект должен записываться в лист. Естественно, я бы изначально сделал бы через метод и вызывал его, но это не соответсвует требованию задачи.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
01.02.2018, 17:48 14
Цитата Сообщение от Hander222 Посмотреть сообщение
должен записываться в лист
а где (в каком классе) и как объявлен этот лист?
Цитата Сообщение от Hander222 Посмотреть сообщение
что при создании объекта, сразу объект должен записываться в лист
другая возможная интерпретация этих слов
C#
1
2
3
4
5
        static void Main(string[] args)
        {
            List<Album> AlbumCollections = new List<Album>();
            AlbumCollections.add(new Album("11", "sdf", 2231)); //сразу записался
        }
Цитата Сообщение от Hander222 Посмотреть сообщение
но это не соответсвует требованию задачи.
которые мы до сих пор так и не видели увидели почему-то может я напрасно предостерегаю и это тот 1% случаев где надо по-вашему делать
0
1 / 1 / 0
Регистрация: 24.11.2017
Сообщений: 36
01.02.2018, 18:35  [ТС] 15
КОП, что вы хотите увидеть? есть класс Album. в нем есть конструктор (написано выше) и поле типа lIst. При создании объекта, этот объект должен записаться в лист.


Пример как работает, но здесь написали, что так некорректно.

класс Album
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
class Album:IEnumerable
 
    {
 
        private string signer;
        private string name;
        private int year;
        private Song[] song;
        private int count = 1;
 
        public static List<Album> AlbumCollections=new List<Album>(1);
        public Album(string Sign, string Name, int Year)
        {
            this.signer = Sign;
            this.name = Name;
            this.year = Year;
            AlbumCollections.Add(this);
              
                    
        }
        public void AddSong(string Track, int TrackLength)
        {
            Array.Resize<Song>(ref song, count);
            int songlan = song.Length;
            song[songlan-1] = new Song(Track, TrackLength);
            count++;
        }
        public string Signer
        {
            get { return signer; }
            set { signer = value; }
        }
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public int Year
        {
            get { return year; }
            set { year = value; }
        }
        public IEnumerator GetEnumerator()
        {
            for (int i = 0; i < song.Length; i++)
           {
                yield return song[i];
           }
        }
        public int Length
        {
            get { return song.Length; }
        }
        public Song this[int index]
        {
            get { return song[index]; }
            set { song[index] = value; }
        }
Есть еще один класс - Song, но там ничего особого, только поля.

Теперь реализация класса

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
     static void Main(string[] args)
        {
          string file = @"E:\group.dat";
          Album one = new Album("signer1", "name1", 2001);
         Album one1 = new Album("signer2", "name2", 2002);
         Album one2 = new Album("signer3", "name3", 2003);
         Album one3 = new Album("signer4", "name4", 2004);
         one.AddSong("song11", 1);
         one1.AddSong("song21", 1);
         one2.AddSong("song31", 1);
         one3.AddSong("song41", 1);
 
          foreach (Album o in Album.AlbumCollections)
                   {
 
                  Console.WriteLine("Исполнитель " + o.Signer + " Название " + o.Name + " Год " + o.Year);
 
                   }

На экране появляются все альбомы.

Можно через foreach вывести содержимое каждого альбома.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
01.02.2018, 18:57 16
Цитата Сообщение от Hander222 Посмотреть сообщение
что вы хотите увидеть?
вот так бы в первом посте, сразу понятно о чем говорим!
Цитата Сообщение от Hander222 Посмотреть сообщение
Пример как работает, но здесь написали, что так некорректно.
с точки зрения ООП один единственный альбом не должен ничего знать о других альбомах. См. ответ товарища Diamante.
Не могу знать что за преподаватель, может его ваш вариант в рамках проходимой темы вполне устроит, как знать.
Цитата Сообщение от Hander222 Посмотреть сообщение
public int Year
* * * * {
* * * * * * get { return year; }
* * * * * * set { year = value; }
* * * * }
можно записать
C#
1
public int Year { get; set; }
Не сочтите мои комментарии за придирки, просто хотел направить в нужное русло (что без кода/условия задачи могло быть к тому же неправильно)
0
1 / 1 / 0
Регистрация: 24.11.2017
Сообщений: 36
01.02.2018, 19:03  [ТС] 17
КОП, преподаватель - очень серьёзный человек . Бронзовый чемпион мира по программированию. Покажу ему этот вариант, возможно зачтёт. (Задача не вся, это только малая часть задачи)
Всем спасибо за ответы. Тема закрыта .
0
01.02.2018, 19:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2018, 19:03
Помогаю со студенческими работами здесь

Передача обьекта
Ребят подскажите как передать обьект со всеми его свойствами в функцию повершел. допустим есть...

Массив объектов класса List: Error CS0118: `list' is a `field' but a `type' was expected
Не могу понять что делаю не так, вот код: SimpleClass { } List&lt;SimpleClass&gt; list = new...

Передача обьекта в функию
Изучаю прогу в универе, понадобилось сделать обьект как аргумент функции.ООП ещё не изучали.Как...

Передача обьекта в атрибут
Встала такаЯ проблема. Есть обьект function robot(name) { this.name=name } var kreg=new...

Передача в функцию обьекта
Всем привет. В интернете ничего не нашел по этому поводу: Я делаю шашки и у меня есть класс USER...

Передача пользовательского обьекта
есть WCF сервис public class SendEmailService : ISendEmailService { public void...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru