Нужен метод, который принимает все виды дозвуковых коллекций в качестве параметра - PullRequest
0 голосов
/ 11 июня 2009

Если у меня есть метод, который делает что-то с несколькими Subsonic ActiveRecords и не знает, какой именно тип, это просто благодаря интерфейсам.

public void DoSomething(IActiveRecord item)
{
   // Do something
}

Но что, если у вас есть метод, и вы не знаете, какую коллекцию (например, ProductCollection) вы получаете? Как мне объявить мой параметр? Интерфейс IActiveList отсутствует.

Я попробовал это с общим подходом, но это не компилируется.

public void Add<Titem, Tlist>(ActiveList<Titem, Tlist> list)
{
    foreach(IActiveRecord item in list)
    {
        // Do something
    }
}

Ответы [ 4 ]

2 голосов
/ 11 июня 2009

Вы можете ограничить параметр как BindingListEx (базовый класс для AbstractList), который даст вам перечисляемый список:

public void <T>(T list) where T : BindingListEx<IActiveRecord>
{
    foreach(IActiveRecord item in list)
    {

    }
}
1 голос
/ 11 июня 2009

Может быть, это вам поможет?

http://msdn.microsoft.com/en-us/library/d5x73970

public void Add<Titem, Tlist>(ActiveList<Titem, Tlist> list) where Titem : IActiveRecord

Не знаю, я ничего не знаю о SubSonic. Но я полагаю, что ограничения классического класса сделали бы свое дело:)

0 голосов
/ 17 июня 2009

Используйте SubSonic.IAbstractList все виды дозвуковых коллекций реализуют этот интерфейс.

Приветствия

0 голосов
/ 11 июня 2009

Хорошо,

благодаря Адаму, вот как это работает:

У меня есть общий

List<MyClass>

MyClass требуется IActiveRecord в конструкторе. Я хочу иметь возможность добавлять объекты MyClass, объекты IActiveRecord и коллекции Subsonic ... в список:

public class MyList : List<MyClass>
{

    public void Add(IActiveRecord item)
    {
        this.Add(new MyClass(item));
    }

    public void Add<T>(BindingListEx<T> list) where T : IActiveRecord
    {
        list.ToList().ForEach(x => Add(new MyClass(x)));
    }

}
...