积极答复者
关于使用CodeDom自动生成代码时为调用方法设置参数的问题

问题
-
各位好。
我最近在尝试使用CodeDom机制自动生成代码,在通过CodeMethonInvokeExpression调用方法时,需要为调用的方法设置参数,这些参数可以是简单类型,也可以是复杂的自定义类型。
对于简单类型,例如10或者true,我们可以通过新建CodePrimitiveExpression的方式来解决;但是对于复杂类型,例如当我们自定义一个Employee类型,其中包含姓名、出生年月等信息,然后我们有一个名为emp的Employee类型的变量,那么我应该通过什么方式将emp传入到我想要调用的方法呢?
我查看了CodeExpression的子类,没有找到合适的方式。我相信之前肯定有人遇到过类似的问题,也有对应的解决方案。欢迎大家讨论呀。
谢谢。
答案
-
你可以考虑用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
全部回复
-
看来这里的人气不是很高呀。
我仔细思考了一下,对于自定义类型,可能需要根据实例化的时机,分为两种情况。第一种情况,如果自定义类型是通过CodeDom机制进行实例化的,那么我们可以考虑使用CodeVaribleReferenceExpression的方式来解决,如果自定义类型是在CodeDom外面定义的,那么我们可能需要两步走,首先通过CodeObjectCreateExpression的方式来在CodeDom中重新建立实例,然后再使用CodeVaribleReferenceExpression来引用新创建的实例。
但是当自定义类型中的属性很多时,CodeObjectCreateExpression会变得非常繁琐。
有人知道有什么其他便捷的方式吗?
-
你可以考虑用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