private TPopulationAnalysis convertedAnalysis <TPopulationAnalysis>(PopulationAnalysis templatePopulationAnalysis) where TPopulationAnalysis : PopulationAnalysis, new() { //same type? No need to convert the template. It can be use as is if (templatePopulationAnalysis.GetType() == typeof(TPopulationAnalysis)) { return(templatePopulationAnalysis.DowncastTo <TPopulationAnalysis>()); } var typedAnalysis = new TPopulationAnalysis(); typedAnalysis.UpdatePropertiesFrom(templatePopulationAnalysis, _cloner); return(typedAnalysis); }