我想寫一個類,它可以處理許多不同類型的輸入,所有這些都實現相同的接口。我可以避免或優化此動態調用嗎?
我有以下代碼:
private IEnumerable<IPlan> DevisePlans(ITile tile, IEnumerable<ISpace> spaces)
{
MethodInfo method = GetType().GetMethod("DevisePlans",
BindingFlags.NonPublic | BindingFlags.Instance,
null,
new[] {tile.GetType(), typeof(ISpace)},
null);
var type = typeof(Func<,,>).MakeGenericType(tile.GetType(), typeof(ISpace), typeof(IEnumerable<IPlan>));
var planner = Delegate.CreateDelegate(type, this, method);
return spaces.SelectMany(s => (IEnumerable<IPlan>)planner.DynamicInvoke(tile, s));
}
有很多DevisePlans
各種實施方式的類中,每一個實現ITile
的第一參數的類型。
private IEnumerable<IPlan> DevisePlans(Foo tile, ISpace space) { /* ... */ }
private IEnumerable<IPlan> DevisePlans(Bar tile, ISpace space) { /* ... */ }
這個工作,但我打電話DynamicInvoke
爲我的enumerable的每一個迭代。即使我不能完全避免動態調用,是否有任何方法來優化此方法,以便動態調用不再駐留在我的循環中?
我能說清楚這是什麼?有更多特定類型的'DevisePlans'重載的* lot *嗎?要麼...? – 2012-04-25 20:23:55
你的代碼目標有點模糊不清。你能給出一個高層次的概述嗎?也許還有另一種方式*給皮膚上皮(可以這麼說)。 – user7116 2012-04-25 20:23:58