c# - 从父列表中调用通用子函数
问题描述
我有以下课程以构建流程列表
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>();
然后我在我的 List 中添加了一些 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;
...
}
它告诉我“Flow 不包含 MyEntity 的定义”
解决方案
编译器是正确的 -Flow
不包含调用的方法MyEntity
-Flow<T>
确实。
MyEntity
此外,您正在添加具有不同泛型参数的泛型“流”——如果所有元素都具有不同的实体类型,您如何知道类型是什么?换句话说, 的类型是currentResult
什么?
您可以使用dynamic
并将所有这些绑定推迟到运行时,这意味着您必须确保其中的每个元素_flow
都有一个MyEntity
属性,但您不会知道该变量在编译类型时的类型(这意味着它必须是动态的出色地)。
所有这一切都说没有一个明显的解决方案 - 你有一个松散相关实体的列表 - 这意味着它们只是因为它们都是泛型类型的实例而相关,但你不知道这些类型是什么在编译时。
推荐阅读
- python - 将整数添加到字典(TypeError:'int' 对象不可下标)
- reactjs - Trans Component i18next 中的动态内容
- node.js - Google OAuth2 无法获取个人资料信息
- c++ - 从文本文件中读取,然后将项目存储到列表中
- ruby-on-rails - activerecord-multi-tenant /acts_as_tenant 和 Active Admin
- c# - 尝试从 sql 数据库中读取数据并在文本框中显示 - Visual C#(语法错误)
- javascript - 下载完成后 Django 更新模板
- javascript - 在反应中重定向到主页时出错
- rx-java - rxjava 过滤流中的项目与流中的任何其他过滤器不匹配
- amazon-web-services - 通过 ec2 上的 curl 获取实例名称?