【发布时间】:2015-04-05 02:47:09
【问题描述】:
我想为动作管理创建一个帮助类。
假设我们有一组方法,例如:
void MyMethod(type1 param1, type2 param2, ..., Action finishedCallback);
我想创建一个以同步方式执行给定方法的类。
// var method1 is MyMethod1(int p1, string p2, c => {Console.WriteLine("m1 finished");})
// var method2 is MyMethod2(float p1, string p2, object p3, c => {Console.WriteLine("m2 finished");})
class Parameter
{
public object Type {get; set;}
public object Value {get; set;}
}
var actions = new List<Tuple<Action, List<Parameter>>>();
actions.Add(new Tuple<Action, List<Parameter>>(method1, m1Params));
actions.Add(new Tuple<Action, List<Parameter>>(method2, m2Params));
如何执行我的操作?
foreach (var action in actions)
{
// ???
}
[编辑]
抱歉,忘记了……我也想同步这些动作,因为它们可以异步执行,其中一些必须按指定顺序执行。
所以如果我们有 method1 和 method2 我也会提供类似的东西:
MyMethod1(p1, p2, c => {
MyMethod2(p1, p2, p3, c => {/* etc. if more */});
})
【问题讨论】:
-
这太复杂了。为什么不提供一个重载接受参数?比如
Action<T>、Action<T1, T2>等等? -
因为它是一个“框架”助手,一个公司内的许多人都可以使用它。有时我们可以有 0-2 个参数,有时是 10 个。我想为此找到一个更智能的解决方案:)
-
如果有人传递一个方法 10 个参数,他应该封装它们并传递 1 个。我认为给一个重载采用
Action<T1...T5>应该对任何人都足够了。 -
你不能在元组中添加对“依赖”动作的引用吗?在你的助手内部根据依赖对整个动作集合进行排序?
-
如何使用
myAction.DynamicInvoke(object[] parameters),其中myAction 是Delegate/Action