В этом классе определенны все функции для System.Collections.Generic.IEnumerable[T].
Но нет определения функций для System.Collections.IEnumerable.
Почему вообще понадобилось ?
Класс System.Windows.Forms.ListView.ListViewItemCollection наследуется от IEnumerable, а в .Net 2 не добавили IEnumerable[T].
Такой код не сработал:
listView1.Items.Iter(x => (x :> ListViewItem).Selected = true)
Пока добавил у себя в проекте:
using SC = System.Collections;
namespace Nemerle.Utility
{
module NCollectionUtilsEx
{
public Iter(this source : SC.IEnumerable, action : object -> void) : void
{
foreach (elem in source)
action(elem)
}
}
}
P.S.
Были бы все классы коллекций были бы производными от IEnumerable[T] проблем бы не было.
Я бы написал:
module IEnumerableExtension
{
public Iter['T]
( this e : System.Collections.IEnumerable
, f : 'T -> void
)
{
foreach (x is 'T in e)
f(x)
}
}
Здравствуйте, Don Reba, Вы писали:
DR>Я бы написал:
DR>module IEnumerableExtension
DR>{
DR> public Iter['T]
DR> ( this e : System.Collections.IEnumerable
DR> , f : 'T -> void
DR> )
DR> {
DR> foreach (x is 'T in e)
DR> f(x)
DR> }
DR>}
Я уже подумал о том, что стоит делать типизацию .
Здравствуйте, _nn_, Вы писали:
тогда уж
__>Пока добавил у себя в проекте:
__>__>using SC = System.Collections;
__>namespace Nemerle.Utility
__>{
__> module NCollectionUtilsEx
__> {
__> public Iter[T](this source : SC.IEnumerable, action : T -> void) : void
__> {
__> foreach (elem in source)
__> action(elem :> T)
__> }
__> }
__>}
__>
Здравствуйте, Don Reba, Вы писали:
DR>Я бы написал:
DR>module IEnumerableExtension
DR>{
DR> public Iter['T]
DR> ( this e : System.Collections.IEnumerable
DR> , f : 'T -> void
DR> )
DR> {
DR> foreach (x is 'T in e)
DR> f(x)
DR> }
DR>}
оч спорно
Здравствуйте, Don Reba, Вы писали:
DR>Здравствуйте, Константин Л., Вы писали:
КЛ>>оч спорно
DR>Я считаю так. Хранение разных типов объектов в списке может быть ошибкой, а может и не быть. Расширение должно допускать оба случая, а верифицировать данные можно отдельно.
наоборот
Здравствуйте, Константин Л., Вы писали:
DR>>Я считаю так. Хранение разных типов объектов в списке может быть ошибкой, а может и не быть. Расширение должно допускать оба случая, а верифицировать данные можно отдельно.
КЛ>наоборот
Честно говоря, не улавливаю мысль. Можно поподробнее?
Здравствуйте, Don Reba, Вы писали:
DR>Здравствуйте, Константин Л., Вы писали:
DR>>>Я считаю так. Хранение разных типов объектов в списке может быть ошибкой, а может и не быть. Расширение должно допускать оба случая, а верифицировать данные можно отдельно.
КЛ>>наоборот
DR>Честно говоря, не улавливаю мысль. Можно поподробнее?
Iter должен предоставлять "пробежаться по всем, проапплаить функцию". Ты же предлагаешь туда добавить фильтрацию, которую алгоритм не предполагает. Для случая смешанных коллекций придумали FilterLazy + Iter. Кароч, это уже будет не тот первоначальный Iter