簡體   English   中英

在CodeDOM創建的泛型方法參數中使用泛型參數

[英]Using a generic argument in a generic method parameter created by CodeDOM

我試圖通過代碼圓頂創建一個泛型方法,其中泛型參數用在方法參數中,例如:

String.Join<T>(String, IEnumerable<T>)

我有一些代碼來生成如下所示的參數:

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<> values)
        ;

缺少IEnumerable中的T的地方。

我試圖添加以下內容以強制添加通用參數:

foreach (var generic in parameterType.GetGenericArguments())
{
    var typeref = new CodeTypeReference(generic, CodeTypeReferenceOptions.GenericTypeParameter);
    memberParameter.Type.TypeArguments.Add(typeref);
}

但是,這會產生1'的副本,導致輸出代碼如下所示:

string Join<T>(string separator, System.Collections.Generic.IEnumerable<T>`1 values)
        ;

有關我可能做錯了什么的想法,或者在使用泛型參數時如何正確生成參數?

為下一個獲得股票的人找到了解決方案:

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 (var parameter in method.GetParameters())
 {
   memberMethod.Parameters.Add(new CodeParameterDeclarationExpression(parameter.ParameterType.Name, parameter.Name));
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM