如何使用参数
执行Action委托列表 public static void CompareAll(List<Action<object,object>> compareDelegates)
{
List<Exception> exceptions = new List<Exception>();
// The issue is in below line - how to pass parameters to the delegate
compareDelegates.ForEach(del = (a,b) =>
{
try
{
del.Invoke(a,b);
}
catch (Exception ex)
{
exceptions.Add(ex);
}
});
}
并从下面的代码
调用上述函数List<Action<object, object>> compareDelegates = new List<Action<object, object>>();
compareDelegates.Add((a,b) => Compare(1,2));
CompareAll(compareDelegates);
答案 0 :(得分:0)
由于您的代表对传递的内容不做任何操作,因此您应该使用空的Action
。将您的代码更改为:
public static void CompareAll(List<Action> compareDelegates)
{
List<Exception> exceptions = new List<Exception>();
compareDelegates.ForEach(del =>
{
try
{
del.Invoke();
}
catch (Exception ex)
{
exceptions.Add(ex);
}
});
}
// somewhere else...
List<Action> compareDelegates = new List<Action>();
compareDelegates.Add(() => Compare(1,2));
CompareAll(compareDelegates);
编辑:既然你的问题令人费解,但我上面解决的方式确实没有意义,这是另一种看法
如果您想要列出Action<object,object>
+ 2个值,请使用Tuple
这样做:
public static void CompareAll(
List<Tuple<Action<Object,Object>,Object,Object>> compareDelegates)
{
List<Exception> exceptions = new List<Exception>();
compareDelegates.ForEach(tup =>
{
try
{
tup.Item1.Invoke(tup.Item2, tup.Item3);
}
catch (Exception ex)
{
exceptions.Add(ex);
}
});
}
// somewhere else...
List<Tuple<Action<Object,Object>,Object,Object>> compareDelegates =
new List<Tuple<Action<Object,Object>,Object,Object>>();
compareDelegates.Add(Tuple.Create((a,b) => Compare(a,b), 1, 2));
CompareAll(compareDelegates);
答案 1 :(得分:0)
在这一行:
compareDelegates.ForEach(del = (a,b) =>
你的参数很奇怪。在这种情况下,ForEach
的类型签名为ForEach(Action<Action<object, object>>)
。以下是如何使用它的示例。
object parameter1 = 2;
object parameter2 = 3;
compareDelegates.ForEach(a => a(parameter1, parameter2));
这会使用2
和3
调用列表中的每个操作。但是,你的例子并不十分清楚这是什么意思。