具有新类型约束的通用构造函数

我有两种类型的对象,数据库模型和普通系统模型。

我希望能够将模型转换为数据库模型,反之亦然。

我写了以下方法:

public static E FromModel(T other) where T : sysModel where E : dbModel { return new E(other); } 

基本上sysModeldbModel都是抽象的。

dbModel有许多inherting类,都有复制构造函数。

我收到:

无法创建类型参数“E”的实例,因为它没有new()约束

我知道技术上有时我没有为T每个值都有匹配的构造函数,至少调试器知道什么。

我也尝试添加where E : dbModel, new()约束,但它只是无关紧要。

有没有办法使用generics方法和使用参数将模型转换为另一个模型?

谢谢。

要在generics类型上使用new ,您必须在类/方法定义上指定new()约束:

 public static E FromModel(T other) where T : sysModel where E : dbModel, new() 

由于您在构造函数中使用了一个参数,因此不能使用new ,但您可以使用Activator而将other参数作为参数传递:

 public static E FromModel(T other) where T : sysModel where E : dbModel { return (E)Activator.CreateInstance(typeof(E), new[]{other}); }