none
关于使用CodeDom自动生成代码时为调用方法设置参数的问题 RRS feed

  • 问题

  • 各位好。

    我最近在尝试使用CodeDom机制自动生成代码,在通过CodeMethonInvokeExpression调用方法时,需要为调用的方法设置参数,这些参数可以是简单类型,也可以是复杂的自定义类型。

    对于简单类型,例如10或者true,我们可以通过新建CodePrimitiveExpression的方式来解决;但是对于复杂类型,例如当我们自定义一个Employee类型,其中包含姓名、出生年月等信息,然后我们有一个名为emp的Employee类型的变量,那么我应该通过什么方式将emp传入到我想要调用的方法呢?

    我查看了CodeExpression的子类,没有找到合适的方式。我相信之前肯定有人遇到过类似的问题,也有对应的解决方案。欢迎大家讨论呀。

    谢谢。


    2011年6月28日 15:39

答案

全部回复

  • 看来这里的人气不是很高呀。

    我仔细思考了一下,对于自定义类型,可能需要根据实例化的时机,分为两种情况。第一种情况,如果自定义类型是通过CodeDom机制进行实例化的,那么我们可以考虑使用CodeVaribleReferenceExpression的方式来解决,如果自定义类型是在CodeDom外面定义的,那么我们可能需要两步走,首先通过CodeObjectCreateExpression的方式来在CodeDom中重新建立实例,然后再使用CodeVaribleReferenceExpression来引用新创建的实例。

    但是当自定义类型中的属性很多时,CodeObjectCreateExpression会变得非常繁琐。

    有人知道有什么其他便捷的方式吗?

    2011年6月29日 1:31
  • 你可以考虑用CodeFieldReferenceExpression类。

    CodeFieldReferenceExpression fieldRef1 =
        new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "TestField");

    // A C# code generator produces the following source code for the preceeding example code:

    //    this.TestField

    参考:http://msdn.microsoft.com/zh-cn/library/system.codedom.codefieldreferenceexpression.aspx

     


    Cookie Luo[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Cookie Luo 2011年7月8日 2:32
    2011年7月4日 4:01