Generics 在亚音速2.1中,如何使用一个通用参数进行此通用调用?

Generics 在亚音速2.1中,如何使用一个通用参数进行此通用调用?,generics,c#-3.0,subsonic,Generics,C# 3.0,Subsonic,使用亚音速2.1,我想让我对结果的方法调用如下:results(searchCriteria)现在我必须传递CollectionType和类型 Animal searchCriteria = GetSearchCritera(); AnimalCollection results = results<Animal, AnimalCollection>(searchCriteria); // I want the call to be results(searchCriteria);

使用亚音速2.1,我想让我对结果的方法调用如下:
results(searchCriteria)
现在我必须传递CollectionType和类型

Animal searchCriteria = GetSearchCritera();
AnimalCollection results = results<Animal, AnimalCollection>(searchCriteria);
// I want the call to be results(searchCriteria);
Animal searchCriteria=GetSearchCritera();
动物采集结果=结果(搜索标准);
//我希望调用是结果(searchCriteria);
这是我想要的结果方法

public static T results<Y, T>(Y searchCriteria)
    where Y: ReadOnlyRecord<Y>, new()
    where T:  ReadOnlyList<Y, T>, new()
{
    using (IDataReader results = ReadOnlyRecord<Y>.Find(searchCriteria))
    {
        T a = new  T();
        a.Load(results);
        return a;
    }
}
公共静态T结果(Y搜索条件)
其中Y:ReadOnlyRecord,new()
其中T:ReadOnlyList,new()
{
使用(IDataReader results=ReadOnlyRecord.Find(searchCriteria))
{
T a=新的T();
a、 负荷(结果);
返回a;
}
}
我上了这门课:

    public class ConcreteList<T> : ReadOnlyList<T, ConcreteList<T>> where T: ReadOnlyRecord<T>, new()
    {
        public ConcreteList() { }
    }
public-class-ConcreteList:ReadOnlyList其中T:ReadOnlyRecord,new()
{
public ConcreteList(){}
}
更改了此代码:

    public static ConcreteList<T> results2<T>(T searchCriteria)
        where T : ReadOnlyRecord<T>, new()
    {
        using (IDataReader results = ReadOnlyRecord<T>.Find(searchCriteria))
        {
            ConcreteList<T> a = new ConcreteList<T>();
            a.Load(results);
            return a;
        }
    }
公共静态具体列表结果2(T搜索条件)
其中T:ReadOnlyRecord,new()
{
使用(IDataReader results=ReadOnlyRecord.Find(searchCriteria))
{
ConcreteList a=新的ConcreteList();
a、 负荷(结果);
返回a;
}
}
我可以这样称呼它:

    Animal searchCriteria = GetSearchCritera();
    ConcreteList<Animal> results = results2(searchCriteria);
Animal searchCriteria=GetSearchCritera();
具体列表结果=结果2(搜索标准);
哦,是的,我希望这是一种扩展方法:

public static class ReadOnlyRecordExtensions
{
    public static ConcreteList<T> ExecuteFind<T>(this T searchCriteria)
            where T : ReadOnlyRecord<T>, new()
    {
        using (IDataReader results = ReadOnlyRecord<T>.Find(searchCriteria))
        {
            ConcreteList<T> list = new ConcreteList<T>();
            list.Load(results);
            return list;
        }
    }
}
公共静态类ReadOnlyRecordExtensions
{
公共静态ConcreteList ExecuteFind(此T搜索条件)
其中T:ReadOnlyRecord,new()
{
使用(IDataReader results=ReadOnlyRecord.Find(searchCriteria))
{
ConcreteList=新的ConcreteList();
列表。加载(结果);
退货清单;
}
}
}

如果你只告诉它关于动物的事,你怎么能指望它知道要创建什么样的收藏?可能有多个合适的集合。
Collection
类型可能总是
blahCollection
,其中
blah
是基础记录类型。@David:您可能想看看最新版本,谢谢@mellamokb。为了可预见的未来,我们在这个特殊的项目上一直停留在亚音速2上。看起来有3个解决了我的非类型问题:)