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