2008-12-30 116 views
5

没有人知道用CodeDom调用基类的泛型方法吗?CodeDom - 调用通用方法

我没有问题调用标准方法,但我找不到调用通用的解决方案。

我用它来调用标准的基类方法的GetInstance代码:

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

回答

11

你可以找到你的答案here在MSDN:

向下滚动到C#示例(CodeDomGenericsDemo)。产生

的通用方法:

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

后来在示例中执行:

dict.Print<decimal, int>(); 

的代码以产生所述调用​​方法:

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

(你将使用CodeThisReferenceExpression()或CodeBaseReferenceExpression()而不是CodeVariableReferenceExpression),n ot确定这是否意味着通过调用标准的基类方法。