[C#] Implementing IEnumerable<T>
for(int i=0; i<this.getLength; i++) {
yield return this.getByIndex(i);
}
работает так: выполняем цикл, на каждой итерации делаем yield return ... - оно добавляется к какому-то "массиву", который будет возвращён; в результате, в этом массиве оказывается this.getLength делегатов => return this.getByIndex(0 => return this.getByIndex(1 ... которые уже будут выполняться при прохождении снаружи по самому "массиву" (который имеет тип System.Collections.Generic.IEnumerable<T>)?
Не угадал. Цикл с yield return превращается в конечный автомат с состояниями, посмотри рефлектором.
А где именно находится говно в коде из первого поста, не подскажешь?
ps
не понял что ты хочешь, но скорее всего это лучше делать через extension
pps
public ругается - посмотри что такое explicit и implicit interface Implementation
что ты вообще хочешь?Написать своё массивоподобное, чтобы по нему можно было ходить foreach-ем.
public ругается - посмотри что такое explicit и implicit interface ImplementationА, понял - если мы имплементим метод интерфейса (а это происходит явно, т.к. в имени метода указан интерфейс то он в любом случае должен быть public, и модификаторы видимости не имеют смысла?
Оставить комментарий
kruzer25
Основываясь в первую очередь ( ) на сообщениях об ошибках, выдаваемых редактором, и во вторую - на MSDN, где этот вопрос как-то не очень освещён, получил следующее:(если написать у методов public, непонятно почему получаем сообщение об ошибке "the modifier 'public' is not valid for this item"; определить System.Collections.IEnumerable, насколько я понял, я обязан).
Чувствую, что в этом коде полно говна, а обосновать не могу
Что хотелось - сделать так, чтобы по классу, расширяющему IArray<T>, можно было проходить foreach-ем, при этом, там, где этот reach - редактор знал бы, что то, что мы в foreach-е получаем - типа T.
Код с yield взял из msdn, для меня это тёмный лес (но реализовывать самому ручками все эти movenext, current итд влом).