I have 2 types of objects, Database models and normal system models.
I want to be able to convery the model into Database model and vice versa.
I have the following method I wrote:
public static E FromModel<T, E>(T other)
where T : sysModel
where E : dbModel
{
return new E(other);
}
basically both sysModel and dbModel are abstract.
dbModel have lots of inherting classes which all have copy constructors.
Im receiving :
Cannot create an instance of type parameter 'E' becauase it does not have the new() constraint
Im aware that technically sometimes I dont have a matching constructor for every value of T, at least that whats the debugger know.
I also tried adding the where E : dbModel, new() constraint, but its just irrelevant.
Is there a way to convert model into another model using generic method and using parameters?
Thanks.
To use new on a generic type, you would have to specify the new() constraint on your class/method definition:
public static E FromModel<T, E>(T other)
where T : sysModel
where E : dbModel, new()
Since you are using a parameter in the constructor, you can't use new, but you can use the Activator instead and pass other as an argument:
public static E FromModel<T, E>(T other)
where T : sysModel
where E : dbModel
{
return (E)Activator.CreateInstance(typeof(E), new[]{other});
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With