Pergunta

alguém sabe uma maneira de chamar um método genérico de uma classe base com CodeDom?

Não tenho nenhum problema chamando um método padrão, mas não consigo encontrar uma solução para ligar para o genérico.

O código que eu uso para chamar a GetInstance método de classe base padrão:

CodeAssignStatement assignStatement = new CodeAssignStatement(
     new CodeVariableReferenceExpression("instance"),
     new CodeMethodInvokeExpression(
         new CodeThisReferenceExpression(),
         "GetInstance",
         new CodeExpression[] { new CodeVariableReferenceExpression("instance") }
     ));
Foi útil?

Solução

Você pode encontrar a sua resposta aqui no MSDN :

desloque-se para o exemplo C # (CodeDomGenericsDemo).

Um método genérico é gerada:

 public virtual void Print<S, T>()
            where S : new()
        {
            Console.WriteLine(default(T));
            Console.WriteLine(default(S));
        }

e mais tarde executado no exemplo:

dict.Print<decimal, int>();

O código para gerar a chamada para o método:

 methodMain.Statements.Add(new CodeExpressionStatement(
                 new CodeMethodInvokeExpression(
                      new CodeMethodReferenceExpression(
                         new CodeVariableReferenceExpression("dict"),
                             "Print",
                                 new CodeTypeReference[] {
                                    new CodeTypeReference("System.Decimal"),
                                       new CodeTypeReference("System.Int32"),}),
                                           new CodeExpression[0])));

(Você usaria CodeThisReferenceExpression () ou CodeBaseReferenceExpression () em vez do CodeVariableReferenceExpression), não tenho certeza se é isso que você quer dizer chamando o método de classe base padrão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top