![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Sash_79 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.5.2007 Репутация: нет Всего: нет |
помогите
using System; using System.Collections.Generic; using System.Text; namespace glava_4_numerator { //------------------------------------------------- class car { public int currSpeed; public int maxSpeed; public string petName; public car(string name, int max, int curr) { currSpeed = curr; maxSpeed = max; petName = name; } } //----------------------------------------------------- public interface IEnumerable { IEnumerator GetEnumerator(); } //------------------------------------------------------ public interface IEnumerator { bool MoveNext(); object current { get;} void Reset(); } //------------------------------------------------------ class cars:IEnumerable,IEnumerator { int pos = -1; public bool MoveNext() { if (pos < cararray.Length) { pos++; return true; } return false; } public void Reset() { pos = 0; } public object current { get { return cararray[pos]; } } private car[] cararray; public IEnumerator GetEnumerator() { return (IEnumerator)this; } public cars() { cararray = new car[4]; cararray[0] = new car("feefee", 200, 0); cararray[1] = new car("cluner", 90, 0); cararray[2] = new car("zippy",120,0); cararray[3] = new car("BMW", 150, 0); } } class work { static void Main(string[] args) { cars m3=new cars(); IEnumerable h = (IEnumerable)m3; h.GetEnumerator(); IEnumerator itfEnum; itfEnum = (IEnumerator)m3; foreach (car c in m3) { Console.WriteLine("Name: {0}",c.petName); Console.WriteLine("Max speed: {0}",c.maxSpeed); } IEnumerator itfEnum; itfEnum=(IEnumerator)m3; itfEnum.Reset(); itfEnum.MoveNext(); object curCar=itfEnum.current; Console.ReadLine(); } } } |
|||
|
||||
| 0000 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.7.2006 Где: Нижний Новгород Репутация: нет Всего: 5 |
class cars:IEnumerable,IEnumerator
это что такое?? класс и итерируемый и итератор??????? эт не дело..делай отдельный итератор, который в конструкторе принимает массив элементов car |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 36 Всего: 170 |
Это пример из учебника Троелсена. И старого издания (для FW1), и нового (для FW2). Так что делать так можно... по крайней мере Троелсену, он считается уже "классиком". Другое дело, что с точки зрения архитектуры это решение отвратительное... ну да он всегда так пишет. Sash_79, примеры нужно переписывать внимательно (свойство Current нужно писать с большой буквы) и вдумчиво. Почему определен два раза в одной и той же области видимости. Это элементарная ошибка. И вообще, зачем определять интерфейсы в коде. Что, стандартные IEnumerable,IEnumerator не подходят? свои нужно расписывать? Проверки на выход за пределы массива нет. Это тоже плохо. Это сообщение отредактировал(а) tol05 - 9.11.2007, 10:30 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Sash_79 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.5.2007 Репутация: нет Всего: нет |
tol05, интерфейс определен два раза в одной и той же области видимости-это ошибка, но мне хотелось бы узнать почему компилятор зацикливается на foreach
|
|||
|
||||
| 1stain |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 486 Регистрация: 30.7.2007 Где: Киев - Харьков Репутация: 3 Всего: 40 |
тебе ж уже написали:
что непонятного? кроме того, в методе MoveNext стоило бы поменять условие: вместо if (pos < cararray.Length) писать if (pos < cararray.GetUpperBound(0)) з.ы. в реальном коде не пиши свои интерфейсы, которые уже существуют. В данном случае класс Cars стоило бы наследовать от System.Collections.IEnumerable & System.Collections.IEnumerator. А еще лучше (имхо) - от класса System.Collections.ObjectModel.Collection<Car> Это сообщение отредактировал(а) 1stain - 9.11.2007, 14:52 -------------------- Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein) ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |