需要一种接受所有类型的Subsonic Collections作为参数的方法

时间:2009-06-11 11:49:32

标签: c# subsonic

如果我有一个方法可以处理多个Subsonic ActiveRecords,并且由于接口而无法确切地知道它是什么类型。

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

但是如果你有一个方法并且你不知道你得到什么Collection(例如ProductCollection)怎么办?我如何申报参数?没有IActiveList接口。

我尝试使用通用方法,但不能编译。

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

4 个答案:

答案 0 :(得分:2)

你可以将参数限制为BindingListEx(AbstractList的基类),它会给你一个可枚举的列表:

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

    }
}

答案 1 :(得分:1)

也许这会对你有帮助吗?

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

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

Dunno,我对SubSonic一无所知。但我猜通用类约束可以解决这个问题:)

答案 2 :(得分:0)

确定,

感谢Adam a Meeh,以下是它的工作原理:

我有一个通用的

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)));
    }

}

答案 3 :(得分:0)

使用SubSonic.IAbstractList所有类型的亚音速集合实现此接口。

干杯