C# 没有原型的Delegate.CreateDelegate

C# 没有原型的Delegate.CreateDelegate,c#,reflection,delegates,C#,Reflection,Delegates,现在,我必须这么做 private delegate void set(int obj); //declare the prototype ... Delegate delegate1 = Delegate.CreateDelegate(typeof(set), new testObject(), props[0].GetSetMethod()); ((set)delegate1)(1); 有没有一种方法可以在没有原型的情况下创建委托并使用任何参数调用它?GetSetMethod()返回一

现在,我必须这么做

private delegate void set(int obj); //declare the prototype

...
Delegate delegate1 = Delegate.CreateDelegate(typeof(set), new testObject(), props[0].GetSetMethod());

((set)delegate1)(1);
有没有一种方法可以在没有原型的情况下创建委托并使用任何参数调用它?GetSetMethod()返回一个非常特定的MethodInfo,该MethodInfo将特定类型作为参数


感谢您在.NET 3.5中使用
表达式。GetActionType

    Type setterType = Expression.GetActionType(props[0].PropertyType);
    Delegate delegate1 = Delegate.CreateDelegate(setterType,
        new testObject(), props[0].GetSetMethod()
    );
或者,如果您想要一个打开的委托(即到任何
testObject
实例,而不是绑定到新实例):

但是,;请注意,您必须通过
DynamicInvoke
使用这些委托,这比通过
Invoke
使用全类型委托慢得多


另一个选项(在这种情况下)是绑定到接受
对象的委托,并在委托内部使用强制转换可以通过一些编译的
表达式或自定义IL。

他也可以将
类型(操作)
传递到
CreateDelegate
:)以上是因为我不想为每种可能的类型(int、double、…用户定义的类型)编写委托原型。当直接代理需要约15毫秒时,需要5000毫秒以上。我希望直接调用委托能够自动转换为Set方法所需的类型。@280Z28-我有意将其保留在最一般的情况下,我们只有一个PropertyInfo。这是我前面的问题。只是在探索另一种选择。顺便说一下,道具[0]是一个PropertyInfo
    Type setterType = Expression.GetActionType(
        props[0].DeclaringType, props[0].PropertyType);
    Delegate delegate1 = Delegate.CreateDelegate(setterType,
        null, props[0].GetSetMethod()
    );