2012-05-22 104 views
1

我之前問過類似的問題,但我只是有一個很難包裝我解決此頭...傳遞委託方法和動態調用參數

我有一個委託......

delegate void assertDelegate(params object[] args); 

,我有調用該委託的方法...

public void assert(assertDelegate assertMethod, params object[] args) { 
     string expectedValue; 
     string actualValue; 
     // derive value of 'expectedValue' and 'actualValue' from 'args' 
     assertMethod.DynamicInvoke(expectedValue, actualValue); 
    } 

我的想法是,必須有通過動作和動態調用的參數爲行動的方式...

assert(Assert.AreEqual,new object[]{ HtmlDiv.PropertyNames.Id, "footer"}); 

但我得到錯誤Expected a method with 'void AreEqual(params object[])' signature

也許我誤解DynamicInvoke

+0

你歌廳錯誤,因爲Assert.AreEqual和assertDelegate的簽名不一樣 – gabba

+0

你能解釋一下你想要做的更普遍的是什麼?您可以使用反射動態調用傳遞給函數的一些方法,並把參數 – gabba

+0

什麼是Assert.AreEqual的簽名? –

回答

1
delegate void assertDelegate(params object[] args); 

此代表簽名不符合Assert.AreEqual的任何簽名。 改用:

delegate void assertDelegate(string first, string second); 

還是一個Func<string, string>

+0

@gabba實際上它不會。如果OP僅使用字符串方法,這只是一個建議。他/她可以自由地做任何適合他需要的事情。 –

+0

@gabba好吧,我剛剛明白。謝謝! –