我正在尝试创建一个通用映射函数,它将接受所有从 NSReportBase 继承的各种类型,然后新建适当的对象并返回它。到目前为止,我有以下内容:
internal static T BuildNamingStandardType<T>(DataRow dr) where T : NSReportBase, new()
{
T newNamingStandardReport = null;
if (typeof(T) is NSPipelineSystems)
newNamingStandardReport = new NSPipelineSystems(dr["Column1"], dr["Column2"]);
else if (typeof(T) is NSPipelineSegmentGroups)
newNamingStandardReport = new NSPipelineSegmentGroups(dr["Column3"]);
return newNamingStandardReport;
}
但是,我收到一个错误,即每种具体类型都不能隐式转换为“T”类型。鉴于编译器知道 T 的类型为“NSReportBase”,我不确定我是否理解这里的问题,更不用说如何解决它了。
编辑:我可能过度简化了这个例子。挑战在于构造函数实际上并不接受任何参数,而是来自作为方法参数的 DataRow 的不同数量和类型的列。我知道我可以多态地执行此操作,但我想通过将此方法移动到相应的域对象中来避免将 DataRow 列名暴露给我的业务逻辑。