2012-01-19 68 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,也許你應該開導他;-) –