我有两种类型的对象,数据库模型和普通系统模型。
我希望能够将模型转换为数据库模型,反之亦然。
以下是我编写的方法:
public static E FromModel<T, E>(T other)
where T : sysModel
where E : dbModel
{
return new E(other);
}
基本上,
sysModel
和dbModel
都是抽象的。
dbModel
有很多继承类,它们都有复制构造函数。我收到了以下错误信息:
我知道,从技术上讲,有时候可能并没有为每个值的Cannot create an instance of type parameter 'E' becauase it does not have the new() constraint
T
提供匹配的构造函数,至少这是调试器所知道的。我还尝试添加了
where E : dbModel, new()
的限制条件,但这只是无关紧要的。是否有一种通用方法将一个模型转换为另一个模型,并使用参数?
谢谢。
new()
约束用于指定该类型具有没有参数的构造函数。您可能需要通过公开所需复制构造的接口引入某种通用工厂方法。 - AnthonyActivator.CreateInstance
来实现,并祈求所使用的类型具有匹配的构造函数。通常,使用泛型类型的解决方案应该避免这种情况,因为你正在对实现施加硬依赖。这有点像说“我希望这个方法能够构造任何类型的存储类,任何类型,但它必须在构造函数中有一个字符串参数,并且必须是文件名”。 - Lasse V. Karlsen