为了构建流列表,我有以下类
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
属性,但您不知道编译类型下该变量的类型(这意味着它也必须是动态的(。
所有这些都意味着没有一个明显的解决方案——你有一个松散相关实体的列表——这意味着它们之间的关联只是因为它们都是泛型类型的实例,但在编译时你不知道这些类型是什么。