Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,268
1

Пользовательские коллекции

22.09.2017, 09:24. Показов 5787. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Первый файл
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace Collection.Collection
{
    // Класс, представляющий собой содержимое коллекции.
    public class Element
    {
        public int FieldA { get; set; }
        public int FieldB { get; set; }
 
        public Element(int fieldA, int fieldB)
        {
            FieldA = fieldA;
            FieldB = fieldB;
        }
    }
}
Второй
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
using System;
using System.Collections;
 
// Создание простой пользовательской коллекции.
 
namespace Collection.Collection
{
    // Класс, представляющий собой пользовательскую коллекцию.
    public class UserCollection : IEnumerable, IEnumerator, IDisposable
    {
        readonly Element[] elements = new Element[4];
 
        public Element this[int index]
        {
            get { return elements[index]; }
            set { elements[index] = value; }
        }
 
        int position = -1;
 
        // Реализация интерфейса IEnumerator:
        // 1. Метод MoveNext().
        bool IEnumerator.MoveNext()
        {
            if (position < elements.Length - 1)
            {
                position++;
                return true;
            }
            return false;
        }
 
        // 3. Свойство Current.
        object IEnumerator.Current
        {
            get { return elements[position]; }
        }
 
        // Реализация интерфейса IEnumerable:
        IEnumerator IEnumerable.GetEnumerator()
        {
            return (IEnumerator)this;
        }
       
        // 2. Метод Reset().
        void IEnumerator.Reset()
        {
            position = -1;
        }
 
        public void Dispose()
        {
            ((IEnumerator)this).Reset();
        }
    }
}
Третий
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
using System;
using System.Collections.Generic;
using Collection.UserCollection;
 
// Создание простой пользовательской коллекции.
 
namespace Collection.Collection
{
    class Program
    {
        static void Main()
        {
          
            // Создаем коллекцию.
            var сollection = new UserCollection<Element>();
 
            // Помещаем в коллекцию 4 элемента.
            сollection[0] = new Element(1, 2);
            сollection[1] = new Element(3, 4);
            сollection[2] = new Element(5, 6);
            сollection[3] = new Element(7, 8);
 
            Console.WriteLine("Foreach 1");
            // В циклической конструкции foreach выводим содержимое коллекции на экран.
            foreach (Element element in сollection)
            {
                Console.WriteLine("{0}, {1}",
                    element.FieldA,
                    element.FieldB);
            }
 
            Console.WriteLine(new string('-', 5));
 
            Console.WriteLine("Foreach 2");
 
            // В циклической конструкции foreach выводим содержимое коллекции на экран.
            foreach (Element element in сollection)
            {
                Console.WriteLine("{0}, {1}",
                    element.FieldA,
                    element.FieldB);
            }
 
            Console.WriteLine(new string('-', 5));
            Console.WriteLine("Manual 1");
            
            var enumerator = (сollection as IEnumerable<Element>).GetEnumerator();
 
            while (enumerator.MoveNext())
            {
                var element = enumerator.Current;
 
                Console.WriteLine("{0}, {1}",
                  element.FieldA,
                  element.FieldB);
            }
 
            if (сollection is IDisposable)
                ((IDisposable) сollection).Dispose();
 
            // Delay.
            Console.ReadKey();
        }
    }
}
В третьем ругается на UserCollection. Это учебный пример, не могу понять, в чем тогда ошибка?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2017, 09:24
Ответы с готовыми решениями:

Пользовательские коллекции
Доброго времени суток всем. Подскажите плиз как это реализовать? &quot;Создать пользовательскую...

Анонимные коллекции в другие коллекции, как?
Здравствуйте. Говорю сразу, я не уверен что есть такой термин как анонимная коллекция. Наверно...

Заменить элементы одной коллекции на элементы другой коллекции
Всем привет, у меня такой вопрос: есть 2 коллекции: List&lt;Person&gt; list1 = new List&lt;Person&gt;...

Пользовательские методы
Надо описать два метода, которые реализуют один и тот же алгоритм (решение квадратного уравнения)....

6
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
22.09.2017, 09:32 2
ну варианта два, либо делать так:

public class UserCollection <T>

либо объявлять так:

var сollection = new UserCollection();
0
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,268
22.09.2017, 11:02  [ТС] 3
SeIZVeIZ, Ошибка 1 Имя типа или пространства имен "UserCollection" отсутствует в пространстве имен "Collection" (пропущена ссылка на сборку?) C:\***\001 - Пользовательские коллекции\001 - IEnumerator, IEnumerable, yield\Collection\Program.cs 3
0
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
22.09.2017, 11:08 4
Полный код показывай, ибо у меня всё отлично работает
0
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,268
22.09.2017, 11:24  [ТС] 5
SeIZVeIZ, всё тоже самое что и выше, только из
C#
1
var сollection = new UserCollection<Element>();
сделал
C#
1
var сollection = new UserCollection();
Пробовал добавить <T> в public class UserCollection и не получается, он выделяет в третьем файле
Цитата Сообщение от ShmelVG Посмотреть сообщение
using Collection.UserCollection;
Цитата Сообщение от ShmelVG Посмотреть сообщение
var сollection = new UserCollection<Element>();
0
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
22.09.2017, 11:32 6
Лучший ответ Сообщение было отмечено ShmelVG как решение

Решение

полностью Ваше код, только с парой переделок, работает отлично всё

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
 public class Program
    {
        public static void Main(string[] args)
        {
            // Создаем коллекцию.
            var сollection = new UserCollection();
 
            // Помещаем в коллекцию 4 элемента.
            сollection[0] = new Element(1, 2);
            сollection[1] = new Element(3, 4);
            сollection[2] = new Element(5, 6);
            сollection[3] = new Element(7, 8);
 
            Console.WriteLine("Foreach 1");
            // В циклической конструкции foreach выводим содержимое коллекции на экран.
            foreach (Element element in сollection)
            {
                Console.WriteLine("{0}, {1}",
                    element.FieldA,
                    element.FieldB);
            }
 
            Console.WriteLine(new string('-', 5));
 
            Console.WriteLine("Foreach 2");
 
            // В циклической конструкции foreach выводим содержимое коллекции на экран.
            foreach (Element element in сollection)
            {
                Console.WriteLine("{0}, {1}",
                    element.FieldA,
                    element.FieldB);
            }
 
            Console.WriteLine(new string('-', 5));
            Console.WriteLine("Manual 1");
 
            var enumerator = (сollection as IEnumerable).GetEnumerator();
 
            while (enumerator.MoveNext())
            {
                var element = enumerator.Current as Element;
 
                Console.WriteLine("{0}, {1}",
                    element.FieldA,
                    element.FieldB);
            }
 
            if (сollection is IDisposable)
                ((IDisposable)сollection).Dispose();
 
            // Delay.
            Console.ReadKey();
 
        }
    }
 
    // Класс, представляющий собой содержимое коллекции.
    public class Element
    {
        public int FieldA { get; set; }
        public int FieldB { get; set; }
 
        public Element(int fieldA, int fieldB)
        {
            FieldA = fieldA;
            FieldB = fieldB;
        }
    }
 
    // Класс, представляющий собой пользовательскую коллекцию.
    public class UserCollection : IEnumerable, IEnumerator, IDisposable
    {
        readonly Element[] elements = new Element[4];
 
        public Element this[int index]
        {
            get { return elements[index]; }
            set { elements[index] = value; }
        }
 
        int position = -1;
 
        // Реализация интерфейса IEnumerator:
        // 1. Метод MoveNext().
        bool IEnumerator.MoveNext()
        {
            if (position < elements.Length - 1)
            {
                position++;
                return true;
            }
            return false;
        }
 
        // 3. Свойство Current.
        object IEnumerator.Current
        {
            get { return elements[position]; }
        }
 
        // Реализация интерфейса IEnumerable:
        IEnumerator IEnumerable.GetEnumerator()
        {
            return (IEnumerator)this;
        }
 
        // 2. Метод Reset().
        void IEnumerator.Reset()
        {
            position = -1;
        }
 
        public void Dispose()
        {
            ((IEnumerator)this).Reset();
        }
    }
using Collection.UserCollection; Вам не нужен, вы же работаете в рамках одного неймспейса
1
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,268
22.09.2017, 13:11  [ТС] 7
SeIZVeIZ, Ваш код вставил - работает, мой нет))Да и Бог с ним, видимо что-то напортачено с библиотеками ))
0
22.09.2017, 13:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2017, 13:11
Помогаю со студенческими работами здесь

Пользовательские методы
static string ZnakiZodiaca(int day, int mon) { if (day &lt;= 31 &amp;&amp; mon &lt;= 12) ...

Классы, пользовательские Исключения
Всем доброй ночи, начал изучать такую тему как &quot;исключения&quot; подскажите пожалуйста в данном коде...

Пользовательские атрибуты или директивы
Часто бывает необходимость в шаблонных участках кода. Допустим, я часто применяю подобную...

Где лучше сохранить пользовательские настройки
Доброго времени суток. Подскажите как лучше сохранить пользовательские настройки? Например, если...


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

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