2008-12-30 43 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確定這是否意味着通過調用標準的基類方法。