如果我有一个方法可以处理多个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
}
}
答案 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
所有类型的亚音速集合实现此接口。
干杯