我有兩個名單。一個有用戶選擇的對象。第二個將包含將用於第一個列表中的對象的方法。是否可以將一個方法插入一個List <>?
List 1
List2
Paul
Method ShakeHand
Mark
Method HighFive
Annie
Method Hug
我會使用索引使列表2中的方法0使用列表1中的對象0. 他們將繼續沿着列表走下去,直到執行每個操作。
我已經嘗試使用Add()
與裏面的方法沒有運氣。 我也用過Google,但沒有運氣,因爲我不確定我應該使用什麼術語。
我有兩個名單。一個有用戶選擇的對象。第二個將包含將用於第一個列表中的對象的方法。是否可以將一個方法插入一個List <>?
List 1
List2
Paul
Method ShakeHand
Mark
Method HighFive
Annie
Method Hug
我會使用索引使列表2中的方法0使用列表1中的對象0. 他們將繼續沿着列表走下去,直到執行每個操作。
我已經嘗試使用Add()
與裏面的方法沒有運氣。 我也用過Google,但沒有運氣,因爲我不確定我應該使用什麼術語。
使用Func<T1, T2, .., TReturn>
或Action<T1, ... Tn>
代表。唯一的問題是這些方法需要具有相同的簽名。
你可以通過插入一個對象 - 也就是類的一個實例來實現。
使用名爲Greet
或類似的方法創建基類。創建實現Greet
方法的子類並執行ShakeHand
,HighFive
或Hug
。插入相應子類的實例,然後在需要時調用Greet
方法。
這一切聽起來有點動態給我。我會使用反射,既用於使用可用的方法填充選擇列表,也用於調用 - 這會將我們引向參數問題。所有提出的解決方案都假定所有要調用的方法都具有相同的簽名。如果這是真的,那麼這些建議中的任何一個都可以發揮作用,因爲我和德米特里需要最少的維護來添加方法。德米特里的版本更好,如果你有一個合適的框架版本(但你仍然需要反射來填充你的選擇列表)。
您正在尋找的術語是「委託」。特別是,查找['行動'](http://msdn.microsoft.com/en-us/library/vstudio/system.action.aspx) –
如果方法具有相同的簽名,委託可能是你想要在列表2中存儲。 – kenny
使用兩個列表的dicsery insead。 – Nahum