NCollectionsUtils
От: _nn_  
Дата: 19.12.08 19:20
Оценка:
В этом классе определенны все функции для 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] проблем бы не было.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: NCollectionsUtils
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 19.12.08 19:57
Оценка: -1
Я бы написал:

module IEnumerableExtension
{
    public Iter['T]
        ( this e : System.Collections.IEnumerable
        , f      : 'T -> void
        )
    {
        foreach (x is 'T in e)
            f(x)
    }
}
Ce n'est que pour vous dire ce que je vous dis.
Re[2]: NCollectionsUtils
От: _nn_  
Дата: 20.12.08 09:24
Оценка:
Здравствуйте, 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>}


Я уже подумал о том, что стоит делать типизацию .
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: NCollectionsUtils
От: Константин Л.  
Дата: 20.12.08 13:57
Оценка: 1 (1)
Здравствуйте, _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)
__>    }
__>  }
__>}
__>
Re[2]: NCollectionsUtils
От: Константин Л.  
Дата: 20.12.08 13:59
Оценка:
Здравствуйте, 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>}


оч спорно
Re[3]: NCollectionsUtils
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 20.12.08 15:23
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>оч спорно


Я считаю так. Хранение разных типов объектов в списке может быть ошибкой, а может и не быть. Расширение должно допускать оба случая, а верифицировать данные можно отдельно.
Ce n'est que pour vous dire ce que je vous dis.
Re[4]: NCollectionsUtils
От: Константин Л.  
Дата: 20.12.08 15:33
Оценка:
Здравствуйте, Don Reba, Вы писали:

DR>Здравствуйте, Константин Л., Вы писали:


КЛ>>оч спорно


DR>Я считаю так. Хранение разных типов объектов в списке может быть ошибкой, а может и не быть. Расширение должно допускать оба случая, а верифицировать данные можно отдельно.


наоборот
Re[5]: NCollectionsUtils
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 20.12.08 16:11
Оценка:
Здравствуйте, Константин Л., Вы писали:

DR>>Я считаю так. Хранение разных типов объектов в списке может быть ошибкой, а может и не быть. Расширение должно допускать оба случая, а верифицировать данные можно отдельно.


КЛ>наоборот


Честно говоря, не улавливаю мысль. Можно поподробнее?
Ce n'est que pour vous dire ce que je vous dis.
Re[6]: NCollectionsUtils
От: Константин Л.  
Дата: 20.12.08 16:15
Оценка: +2
Здравствуйте, Don Reba, Вы писали:

DR>Здравствуйте, Константин Л., Вы писали:


DR>>>Я считаю так. Хранение разных типов объектов в списке может быть ошибкой, а может и не быть. Расширение должно допускать оба случая, а верифицировать данные можно отдельно.


КЛ>>наоборот


DR>Честно говоря, не улавливаю мысль. Можно поподробнее?


Iter должен предоставлять "пробежаться по всем, проапплаить функцию". Ты же предлагаешь туда добавить фильтрацию, которую алгоритм не предполагает. Для случая смешанных коллекций придумали FilterLazy + Iter. Кароч, это уже будет не тот первоначальный Iter
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.