【发布时间】:2012-05-31 09:31:19
【问题描述】:
我有以下场景:
我有三个班级,我们称它们为A、B 和C。它们的共同点是它们继承自同一个接口ISomeInterface,并且它们是使用实体框架映射到实体的类。
我有一个方法接收实现此接口的对象列表,但对象本身将是 A、B 或 C 的实例。
方法外壳是这样的
public void MyMethod(List<ISomeInterface> entityList)
{
foreach(var entity in entityList)
{
ProcessEntity(entity);
}
}
现在,问题出在ProcessEntity 方法上。这是一个通用方法,需要根据类型或实体从数据库中检索匹配元素的表,所以它看起来像这样:
public void ProcessEntity<T>(T entity)
{
using( var repository = new DbRepository())
{
var set = repository.Set<T>();
...
}
}
问题在于var set = repository.Set<T>(); 行失败,因为在这种情况下T 是ISomeInterface,而不是实际类型(A、B 或C),所以它给出了一个异常is 不能与给定的类型相关,这是可以理解的。
所以我的问题是:如何使用列表中对象的实际类型而不是它们实现的接口类型来调用 ProcessEntity。
【问题讨论】:
标签: c# generics inheritance