メソッドパラメーターでジェネリック引数が使用されているコードドームを介してジェネリックメソッドを作成しようとしています。たとえば、次のようになります。
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)
;
私が間違っているかもしれないこと、またはジェネリック引数を使用するときにパラメーターを正しく生成する方法について何か考えはありますか?