如何使用out参数生成方法

时间:2019-02-22 13:36:58

标签: c# reflection system.reflection

使用System.Reflection,如何生成带有out参数的方法?

我可以使用ref生成MakeByRefType,但找不到任何MakeOutType ...

typeBuilder.DefineMethod("myfunc", MethodAttributes.Public | MethodAttributes.Static, typeof(void), new Type[] { typeof(int).MakeByRefType() });

1 个答案:

答案 0 :(得分:0)

那是因为没有out int类型。 Out是attribute,关键字out是语法糖。

您必须在参数定义中指定此参数属性:

var mb = typeBuilder.DefineMethod("myfunc", MethodAttributes.Public | MethodAttributes.Static, typeof(void), new Type[] { typeof(int).MakeByRefType() });
var paramBuilder = mb.DefineParameter(1, ParameterAttributes.Out, "a");
// or: paramBuilder.SetCustomAttribute(new CustomAttributeBuilder(typeof(OutAttribute).GetConstructor(new Type[0]), new object[0]));