2010-12-08 129 views
1

我只是在C#中编写一个ORM类型的项目。调用一个泛型方法,该方法返回泛型集合而不知道类型是什么? C#

基本上,我有一个类的结构是这样的:

IDBOperation --- DBReadOperation

DBOperationPool

基本上,从指定的数据库表中的DBReadOperation地图数据,一类我的解决办法,比如说PersonDetails。

执行此操作的代码是从外部源获取的(不能完全记住?),并且基本返回一个通用集合(Collection)。

我的DBOperationPool需要能够接受任意数量的DBReadOperation并为每个DBReadOperation返回结果。我有这个逻辑..但似乎无法让代码工作?

映射类也建立在仿制药..所以我如何可以实例映射类沿线的是..

MappingClass<?> mappingInstance = new MappingClass<?>(); 
Collection<?> returnedCollection = mappingInstance.MapData(argument); 

我如何(使用泛型,或反思,或任何东西)找出问题出在哪里的地方?可以做到吗?我有一个搜索周围,没有什么似乎与这个确切的问题有关..

显然,容易的路线是使池包括我想映射的类型..但池的全部是我可以抛出DBReadOperation,比如PersonDetails,CompanyDetails等,并将数据映射到需要的地方,并为每种类型正确地返回结果。有了这条路,我可以抛出任何数值DBReadOperations的成池,只要他们处理特定类型的每个DBOperationPool例如..但是那不是我想要的..

在所有这是否有道理?

问候,

西蒙

+0

也许使用对象作为泛型类型参数和然后根据你的需要去做任何事情? (它有点杀死泛型的概念,但它应该工作) – Machinarius 2010-12-08 02:51:44

回答

2

让MappingClass实现一些接口,IMappingClass,则指的是无处不在,你不知道什么类型的通用将持有。

public interface IMappingClass { 
    public void DoStuff(); 
} 

public class MappingClass<T> : IMappingClass { 
    // stuff 
} 

// ... elsewhere ... 

public void DoMappingStuff(IMappingClass map){ 
    map.DoStuff(); 
    // do other stuff... 
} 

// ... 

MappingClass<string> myStringMap = new MappingClass<string>(); 
DoMappingStuff(myStringMap); 

MappingClass<int> myIntMap = new MappingClass<int>(); 
DoMappingStuff(myIntMap); 
+0

这两个选项都没有真正处理我的问题 - >这是我的错,我解释得很糟糕.. – Simon 2010-12-08 04:25:33

2

您的DBReadOperation类可以通用吗?这意味着,DBReadOperation<T>然后你实例化它:

var dbReadOperation = new DBReadOperation<PersonDetails>(); 

的MappingClass将采取在DBReadOperation并返回T.它可以用来像:

var mapper = new MappingClass<DBReadOperation<PersonDetails>>(); 
Collection<PersonDetails> collection = mapper.MapData(someArgument);