2012-01-19 84 views
3

比方说,我有这样的方法:最简单的方法,当方法中包含一个“裁判”参数

public static object CallMethod(Delegate method, params object[] args) 
{ 
    //more logic 
    return method.DynamicInvoke(args); 
} 

这下面一直很好大多数情况下,调用它像这样(简单的例子):

Delegate methodCall = new Func<decimal,decimal>(Math.Ceiling); 
object callResult = CallMethod(methodCall, myNumber); 

不过,我碰到一个情况,我需要使用这个对发生在一个“裁判”参数(WCF服务电话),其函数功能类不能处理的方法。

Delegate methodCall = 
    new Func<MyService.InputClass, MyService.CallResult>(service.DoWork); 

因为我没有很多的处理代表的经验,这将是对上面的方法传授给我的创建委托的最简单的方法?

+0

重写该方法,使其没有'ref'参数? – dtb

+0

@dtb - 我希望有一种比自定义函数中包装服务生成的包装更简单的方法来解决问题 – John

+0

请参阅http://stackoverflow.com/questions/5197965/c-sharp-funct-not-accepting- ref-type-in​​put-parameter为什么ref是不被允许的,请参阅http://stackoverflow.com/questions/1283127/c-sharp-func-with-out-parameter寻找可能的解决方案。 – dash

回答

0

这不是我的应用程序,所以我没有简单的测试方法(我只是被问到是否知道解决问题的方法),但看起来应该是这样吗?

Delegate methodCall = new Func<MyService.CallResult>(delegate() { return service.DoWork(ref myInput)}); 
object callResult = CallMethod(methodCall, null); 
+0

为什么拥有应用程序的人不会在这里提问? –

+0

@AdamRalph - 他还没有受到StackOverflow方式的启发。在附注中,我收到一封电子邮件,说这确实奏效。 ref的变量也没有问题(它被正确更新) – John

+0

好听。至于SO,也许你应该开导他;-) –