2010-12-08 145 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);