2012-04-23 61 views
4

作爲依賴注入的初步步驟,我正在嘗試將一些基於接口的抽象改造爲遺留代碼。遺留代碼包含我正在努力封裝的lambda使用。下面是現有的λ用法:在執行之前傳遞lambda表達式的方法參數類型

private void MethodAaa(EntityA a, EntityB a, int someInt) {...} 

private void MethodBbb(DateTime date, EntityA e) {...} 


_commandObjectFromThirdPartyLibrary.Execute(() => MethodAaa(a, b, c)); 

_commandObjectFromThirdPartyLibrary.Execute(() => MethodBbb(d, e)); 

我想路線經由一個共同的基類的方法的執行的λ如下:

base.CommonExecute(() => MethodAaa(a, b, c)); 
base.CommonExecute(() => MethodBbb(d, e)); 

base.CommonExecute(Action<???> lamdaExpression) 
{ 
    _commandObjectFromThirdPartyLibrary.Execute(lamdaExpression); 
} 

有人可以提供的如何聲明base.CommonExecute一個例子( ?)正確?

回答

5

我看不出有什麼毛病使用non-generic version of the Action delegate:中Action

base.CommonExecute(Action lambdaExpression) 
{ 
    _commandObjectFromThirdPartyLibrary.Execute(lambdaExpression); 
} 
+0

我覺得我越來越接近,但獲得乾淨的編譯我不得不使用下面的.Execute(()=> lambdaExpression());第三方Execute()方法的參數簽名是奇數,它是一些內部的UnitOfWork類型。在我的問題中引用的代碼的遺留版本一直在工作。 – camelCase 2012-04-23 16:43:45

0

非通用版本是無效的,無效之一:

public delegate void Action(); 
相關問題