从父函数列表中调用泛型子函数



为了构建流列表,我有以下类

public abstract class Flow
{
public string Name { get; set; }
}

public class Flow<T> : Flow
{
public Entity<Personnel, T> MyEntity { get; set; }
}

这是我的Flow列表(每个Flow都属于Flow类型,其中T可以不同(

private List<Flow> _flow = new List<Flow>();

然后我在我的列表中添加了一些Flow:

_flow.Add(new Flow<Type1>() { MyEntity = new ... , FileName = ... });
_flow.Add(new Flow<Type2>() { MyEntity = new ... , FileName = ... });
_flow.Add(new Flow<Type3>() { MyEntity = new ... , FileName = ... });
_flow.Add(new Flow<Type4>() { MyEntity = new ... , FileName = ... });

最后,我想在列表的每个元素上调用Entity.Map函数,如下所示,但这不起作用:

foreach (var flow in _flow)
{
var currentResult= flow.MyEntity.Map();
var currentFilename = flow.FileName;
...
}

它告诉我";流不包含MyEntity"的定义;

编译器是正确的-Flow不包含名为MyEntity的方法-Flow<T>包含。

此外,您还添加了通用的";"流量";具有不同的泛型参数-如果所有元素都具有不同的实体类型,你怎么知道MyEntity的类型是什么?换句话说,currentResult的类型是什么?

可以使用dynamic并将所有这些绑定推迟到运行时,这意味着您必须确保_flow中的每个元素都具有MyEntity属性,但您不知道编译类型下该变量的类型(这意味着也必须是动态的(。

所有这些都意味着没有一个明显的解决方案——你有一个松散相关实体的列表——这意味着它们之间的关联只是因为它们都是泛型类型的实例,但在编译时你不知道这些类型是什么。

最新更新