Skip to main content
 首页 » 编程设计

c#之在不知道类型是什么的情况下调用返回泛型集合的泛型方法 C#

2024年02月23日36飞鱼

我只是想用 C# 编写一个 ORM 类型的项目。

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

IDB操作 --- DBReadOperation

DBOperationPool

基本上,DBReadOperation 将指定数据库表中的数据映射到我的解决方案中的一个类,例如 PersonDetails。

执行此操作的代码取自外部源(不太记得?),并且基本上返回一个通用集合 (Collection)。

我的 DBOperationPool 需要能够获取任意数量的 DBReadOperation 并为它们中的每一个返回结果。我的逻辑不对……但似乎无法让代码正常工作?

映射类也是建立在泛型之上的..所以我如何实例化映射类以符合..

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

我如何(使用泛型、反射或其他方式)找出在上面问号所在的位置放置什么?可以吗?我四处搜索了一下,似乎没有任何东西与这个确切的问题有关。

显然,简单的方法是让池包含我想要映射到的类型。但是池的全部要点是我可以将 DBReadOperation 扔给它,比如 PersonDetails、CompanyDetails 等,并让数据映射到它需要的位置,并为每种类型正确返回结果。通过这条路线,我可以将任意数量的 DBReadOperations 放入池中,只要它们处理每个 DBOperationPool 实例的特定类型..但这不是我想要的..

这有意义吗?

问候,

西蒙

请您参考如下方法:

让 MappingClass 实现一些接口(interface),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);