0

我想使用DynamicMethod生成以下方法。

public string HelloWorld([CustomAttribute]string name)
{
    return name;
}

我尝试了以下方法,但 DefineParameter 始终返回 null。如何将我的自定义属性分配给参数。

class Program
{
    static void Main(string[] args)
    {
        var method = new DynamicMethod("HelloWorld", typeof (string), new[] {typeof (string)});

        var parameterBuilder = method.DefineParameter(1, ParameterAttributes.In, "text");
        parameterBuilder.SetCustomAttribute(new CustomAttributeBuilder(typeof(CustomAttribute).GetConstructor(Type.EmptyTypes), new object[] {}));

        var il = method.GetILGenerator();
        il.Emit(OpCodes.Ldarg_0);
        il.Emit(OpCodes.Ret);

        var temp = (Func<string,string>)method.CreateDelegate(typeof (Func<string, string>));
        Console.WriteLine(temp("Hello World"));
    }
}

public class CustomAttribute : Attribute
{        
}
4

1 回答 1

0

我不知道为什么,但是在您链接到的页面上,文档说它不受支持:

动态方法及其参数不必命名,但您可以指定名称以帮助调试。动态方法或其参数不支持自定义属性。

于 2013-05-01T05:39:54.170 回答