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

标签 c# sql generics reflection orm

我只是想用 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);

关于c# - 在不知道类型是什么的情况下调用返回泛型集合的泛型方法? C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4383606/

相关文章:

swift - 在通用的 swift 函数中进行类型转换

c# - Windows 窗体上的电子邮件验证

c# - 字符串列表不会完全写入文本文件

c# - 有没有办法在 C# 交互中初始化 web.config?

sql - T-SQL Puzzler - 爬行对象依赖关系

php - 获取url参数并插入数据库

c# - 在 ServiceModel 客户端配置部分找不到引用契约(Contract)的默认端点元素......................

SQL 联合但过滤掉部分重复

swift - Swift 中没有 default(T) 吗?

C# 错误 CS1061 : Type `System.Collections.Generic.List<int>' does not contain a definition for `Length'