Tuple <string, string> GenerateCreateMethodsAndConstructors() { var paramsAndArgs = type.Constructors() .Select(method => { var parameters = method.IsImplicitlyDeclared ? SyntaxFactory.ParameterList().Parameters : ((ConstructorDeclarationSyntax)method.Node()).ParameterList.Parameters; var arguments = parameters.Select(x => x.Identifier.ToString()).ConcatStrings(", "); return(new { parameters, arguments }); }) .ToImmutableArray(); var createMethods = paramsAndArgs .Select(info => { return ($@"public static {type.Name} Create({info.parameters}) {{ return new {type.Name}Implementation({info.arguments}); }}"); }) .ConcatStringsWithNewLines(); var constructors = paramsAndArgs .Select(info => { return ($@"public {type.Name}Implementation({info.parameters}) :base({info.arguments}) {{ }}"); }) .ConcatStringsWithNewLines(); return(Tuple.Create(createMethods, constructors)); }