C# 在CodeDOM创建的泛型方法参数中使用泛型参数

C# 在CodeDOM创建的泛型方法参数中使用泛型参数,c#,codedom,C#,Codedom,我试图通过code dome创建一个泛型方法,其中泛型参数在方法参数中使用,例如: String.Join<T>(String, IEnumerable<T>) 但是,这会错误地产生: string Join<T>(string separator, System.Collections.Generic.IEnumerable<> values) ; 但是,这会生成1'的副本,导致输出代码如下所示: foreach (var p

我试图通过code dome创建一个泛型方法,其中泛型参数在方法参数中使用,例如:

String.Join<T>(String, IEnumerable<T>)
但是,这会错误地产生:

string Join<T>(string separator, System.Collections.Generic.IEnumerable<> values)
        ;
但是,这会生成1'的副本,导致输出代码如下所示:

foreach (var parameter in method.GetParameters())
{
    Type parameterType = parameter.ParameterType;

    this.VerifyTypeIsKnown(parameterType, typeSet, parameter.Name, "Parameter");

    globalNamespace.Imports.Add(new CodeNamespaceImport(parameterType.Namespace));

    var memberParameter = new CodeParameterDeclarationExpression(parameterType, parameter.Name);

    memberMethod.Parameters.Add(memberParameter);
}
string Join<T>(string separator, System.Collections.Generic.IEnumerable<T>`1 values)
        ;
字符串联接(字符串分隔符、System.Collections.Generic.IEnumerable`1值)
;

关于我可能做错了什么,或者如何在使用泛型参数时正确生成参数,您有什么想法吗?

找到了解决方案,供下一个了解此问题的人使用:

foreach (var parameter in method.GetParameters())
{
    Type parameterType = parameter.ParameterType;

    this.VerifyTypeIsKnown(parameterType, typeSet, parameter.Name, "Parameter");

    globalNamespace.Imports.Add(new CodeNamespaceImport(parameterType.Namespace));

    var typeArguments = from param in parameterType.GetGenericArguments()
                        select new CodeTypeReference(param);
    var memberParameterType = new CodeTypeReference(parameterType.Name, typeArguments.ToArray<CodeTypeReference>());

    var memberParameter = new CodeParameterDeclarationExpression(memberParameterType, parameter.Name);

    memberMethod.Parameters.Add(memberParameter);
}
foreach(方法.GetParameters()中的var参数)
{
类型parameterType=参数.parameterType;
这个.VerifyTypeIsKnown(parameterType,typeSet,parameter.Name,“parameter”);
globalNamespace.Imports.Add(新的CodeNamespaceImport(parameterType.Namespace));
var typeArguments=来自parameterType.GetGenericArguments()中的param
选择新的CodeTypeReference(参数);
var memberParameterType=新的CodeTypeReference(parameterType.Name,typeArguments.ToArray());
var memberParameter=新的CodeParameterDeclarationExpression(memberParameterType,parameter.Name);
memberMethod.Parameters.Add(memberParameter);
}

它只有一行代码

 foreach (var parameter in method.GetParameters())
 {
   memberMethod.Parameters.Add(new CodeParameterDeclarationExpression(parameter.ParameterType.Name, parameter.Name));
 }
 foreach (var parameter in method.GetParameters())
 {
   memberMethod.Parameters.Add(new CodeParameterDeclarationExpression(parameter.ParameterType.Name, parameter.Name));
 }