2015-08-16 23 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

这将是一个很好的起点。