2015-08-16 27 views
2

我想知道,如果可能的/ OUT參數,創建某種動作/ funcs中,各有不同的泛型列表中。一般動作/ funcs中的列表

我需要這個的原因是我有一個執行者,他的工作是從API獲取數據,該執行者中的每個方法都轉到該API中的不同路徑,並且我希望能夠安排這些請求我不會重載那個API(如果我通過了他們的請求閾值,他們會阻止我)。

因此,每個在執行器的方法被調用的時候,我會說方法及其PARAMS添加到列表中,而另一個線程將運行列表中,並從那裏使用一些超時執行方法。

我必須在執行器這樣的邏輯,而不是從它的調用者。

所以基本上想知道如果我可以這樣做:

List<Func<T,T>> scheduler; 

沒有宣佈上創建類型,而是在運行時添加不同的類型。

如果有一個更好的解決方案或模式這個請大家賜教。

[編輯] 很明顯,我不想要實現這樣的:

Func<List<object>, object> scheduler 
+0

這個問題有幫助嗎? http://stackoverflow.com/questions/3813261/how-to-store-delegates-in-a-list –

+0

參數值從哪裏來?如果它們在您想要安排該功能時可用,只需執行一個'List '。 –

回答

0

如果你知道在添加FUNC到列表的時間參數值,你可以簡單地捕捉他們的lambda適用Func<T, X, Y, Z ...>並因此將其減少到Func<T>,例如

Func<T, X> funcToAdd = ... 
Func<T> wrapper =() => funcToAdd(valueForX); 
myFuncList.Add(wrapper); 

類型的FUNC列表中可以就做List<Func<T>>

+0

列表的聲明是怎樣的?我不能保留它列表>,我必須指定一個類型 – AlexD

+0

你想用返回值做什麼?如果funcs可以返回任何東西,那麼你就不會比'Func 'AFAICT更好 –

0

,您可以撥打List<Tuple<Type, Delegate>>來存儲您的功能。

下面的代碼運行正常:

var scheduler = new List<Tuple<Type, Delegate>>(); 

scheduler.Add(
    Tuple.Create<Type, Delegate>(
     typeof(Func<int, int>), 
     (Func<int, int>)(n => n + 1))); 

scheduler.Add(
    Tuple.Create<Type, Delegate>(
     typeof(Func<string, string, int>), 
     (Func<string, string, int>)((x, y) => x.Length + y.Length))); 

你會那麼就需要使用反射來把他們帶回從一個Delegate

這將是一個很好的起點。