public GenericTypeBuilder CreateTypeBuilder(TypeReaderManager manager, IList <string> genericArguments) { suffixBuilder.Length = 0; suffixBuilder.Append('`'); suffixBuilder.Append(genericArguments.Count); suffixBuilder.Append("[["); for (int i = 0; i < genericArguments.Count; i++) { suffixBuilder.Append(genericArguments[i]); if (i != genericArguments.Count - 1) { suffixBuilder.Append("],["); } } suffixBuilder.Append("]]"); var genericSuffix = suffixBuilder.ToString(); nameBuilder.Length = 0; nameBuilder.Append(GenericTargetType); nameBuilder.Append(genericSuffix); var targetType = nameBuilder.ToString(); var typeBuilder = CreateTypeBuilder(); var actualGenericArguments = new Type[genericArguments.Count]; for (int i = 0; i < actualGenericArguments.Length; i++) { actualGenericArguments[i] = manager.ResolveActualType(genericArguments[i]); } var actualType = ActualGenericTypeDefinition.MakeGenericType(actualGenericArguments); typeBuilder.Specialize(targetType, genericArguments, actualType, actualGenericArguments); return(typeBuilder); }