开发者

Create delegate type in runtime

I try create delegate type using an Expression class, but when I try create delegate from instance of MethodInfo I've got an ArgumentException. I using .NET 4.0 开发者_JAVA百科Here code:

        var method = /*...*/;
        List<Type> tArgs = new List<Type> { method.ReturnType };
        var mparams = method.GetParameters();
        mparams.ToList().ForEach(p => tArgs.Add(p.ParameterType));
        var delDecltype = Expression.GetDelegateType(tArgs.ToArray());
        return Delegate.CreateDelegate(delDecltype, method);

P.S. Sorry for my bad english;)


If you read the documentation for Expression.GetDelegateType(), you would see that the return type has to be the last argument.

That means this code should work:

var tArgs = new List<Type>();
foreach (var param in method.GetParameters())
    tArgs.Add(param.ParameterType);
tArgs.Add(method.ReturnType);
var delDecltype = Expression.GetDelegateType(tArgs.ToArray());
return Delegate.CreateDelegate(delDecltype, method);

This code works for static methods only though. If you want create a delegate from instance method, you need to provide the instance you want to call the method on. To do that, change the last line to:

return Delegate.CreateDelegate(delDecltype, instance, method);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜