2008-12-30 19 views
5

¿Alguien sabe una forma de llamar a un método genérico de una clase base con CodeDom?CodeDom - Llame a un método genérico

No tengo problemas para llamar a un método estándar, pero no puedo encontrar una solución para llamar al genérico.

El código que utilizo para llamar al método de la clase base estándar GetInstance:

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

Respuesta

11

Usted puede encontrar su respuesta here en MSDN:

de desplazamiento hacia abajo para el ejemplo C# (CodeDomGenericsDemo). se genera

Un método genérico:

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

y posteriormente ejecutado en el ejemplo:

dict.Print<decimal, int>(); 

El código para generar la llamada al 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]))); 

(Usted usaría CodeThisReferenceExpression() o CodeBaseReferenceExpression() en lugar de CodeVariableReferenceExpression), n No estoy seguro si eso es lo que quiere decir llamando al método estándar de la clase base.

Cuestiones relacionadas