gpt4 book ai didi

c# - 使用正确的派生类型调用泛型方法

转载 作者:太空狗 更新时间:2023-10-29 17:37:02 26 4
gpt4 key购买 nike

我有以下场景:

我有三个类(class),我们称它们为A , BC .它们的共同点是它们继承自同一个接口(interface),ISomeInterface并且它们是使用 Entity Framework 映射到实体的类。

我有一个方法接收实现此接口(interface)的对象列表,但对象本身将是 A 的实例。 , BC .

方法外壳看起来像这样

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>(); 行失败,因为 TISomeInterface在这种情况下,而不是实际类型( ABC ),因此它给出了一个与给定类型无关的异常,这是可以理解的。

所以我的问题是:如何使用列表中对象的实际类型调用 ProcessEntity,而不是它们实现的接口(interface)类型。

最佳答案

将实体传递给 ProcessEntity 时,您可以应用 dynamic 关键字。在这种情况下,实体的实际类型将在运行时确定。

public void MyMethod(List<ISomeInterface> entityList)
{
foreach(var entity in entityList)
{
dynamic obj = entity;
ProcessEntity(obj);
}
}

关于c# - 使用正确的派生类型调用泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10830913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com