Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2011, 19:49   #1
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию IEnumerator<> как реализовать?

хотел реализовать энумератор для своего класса(класс туп, но энумератор был желателен)
Код:
    public sealed class ChanceList<T> : IEnumerable<ChanceListItem<T>>
    {
        private List<ChanceListItem<T>> list;
        private float Empty;
        public float EmptyChance
        {
            get
            {
                return Empty;
            }
        }
        public bool Add(T item,float Chance)
        {
            if (Empty <= 0.0F) return false;
            if (Chance > Empty) Chance = Empty;
            list.Add(ChanceListItem<T>.Create(item,Chance));
            Empty -= Chance;
            return true;
        }
        public void Add(object i)
        {
            ChanceListItem<T> t = (ChanceListItem<T>)i;
            Add(t.Item, t.Chance);
        }
        public ChanceList()
        {
            list = new List<ChanceListItem<T>>();
            Empty = 100.0F;
        }
        public IEnumerator<ChanceListItem<T>> GetEnumerator()
        {
            return list.GetEnumerator();
        }
    }
итог...
Цитата:
Ошибка 1 "ChanceList<T>" не реализует член интерфейса "System.Collections.IEnumerable.Get Enumerator()". "ChanceList<T>.GetEnumerator()" не может реализовать "System.Collections.IEnumerable.Get Enumerator()", потому что не имеет соответствующего возвращаемого типа "System.Collections.IEnumerator ".
как правильно тогда?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.03.2011, 20:44   #2
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

Добавь в класс такую штуку
Код:
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
m0nax вне форума Ответить с цитированием
Старый 29.03.2011, 20:55   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

пробовал, перегрузка невозможна ж с одинаковыми параметрами..
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.03.2011, 21:16   #4
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

Странно, это же и не перегрузка никакая, а так называемая явная реализация
Оно должно нормально компилироваться, тут уже надо смотреть что не так со студией/версией дотнета и т.д в таком направлении

Код:
    public sealed class ChanceList<T> : IEnumerable<ChanceListItem<T>>
    {
        private List<ChanceListItem<T>> list;
        private float Empty;
        public float EmptyChance
        {
            get
            {
                return Empty;
            }
        }
        public bool Add( T item, float Chance )
        {
            if (Empty <= 0.0F) return false;
            if (Chance > Empty) Chance = Empty;
//             list.Add(ChanceListItem<T>.Create(item, Chance));
            Empty -= Chance;
            return true;
        }
        public void Add( object i )
        {
            ChanceListItem<T> t = (ChanceListItem<T>)i;
//             Add(t.Item, t.Chance);
        }
        public ChanceList()
        {
            list = new List<ChanceListItem<T>>();
            Empty = 100.0F;
        }
        public IEnumerator<ChanceListItem<T>> GetEnumerator()
        {
            return list.GetEnumerator();
        }


        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }

    public class ChanceListItem<T>
    {}
Это совершенно точно компилируется

Последний раз редактировалось m0nax; 29.03.2011 в 21:22.
m0nax вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как реализовать revaldo666 Microsoft Office Access 2 25.10.2010 12:54
как реализовать такое же меню как и здесь KWNlnc Общие вопросы Delphi 7 08.06.2010 22:46
Как реализовать? Gsingle БД в Delphi 4 08.04.2010 11:00
Кнопки как RadioButton'ы в GroupBox'e. Как реализовать? Casper-SC Общие вопросы .NET 9 06.03.2010 20:07
Как реализовать? jojahti Общие вопросы C/C++ 3 15.10.2009 16:05