我有以下情形的一般方法:调用与正确的派生类型
我有三个类,让我们称他们为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>();
...
}
}
的问题是,因为T
是ISomeInterface
线var set = repository.Set<T>();
失败在这种情况下,而不是实际类型(A
,B
或C
),所以它给出了一个与给定的类型无关的异常,这是可以理解的。
所以我的问题是:我如何调用ProcessEntity的列表中的对象的实际类型,而不是它们实现的接口类型。
这样做的伎俩。我将'ProcessEntity(obj);'改变为'ProcessEntity(obj as dynamic);',并且结果很好。动态使用我不知道。非常感谢:) –
@ØyvindKnobloch-Bråthen是的,我很喜欢这个运行时间典型 –