问题描述
public void TestCallback(int a,int b)
{
Console.WriteLine(a + b);
}
现在假设我想将其作为参数传递给另一个方法,该方法采用与 TestCallback
签名匹配的委托。
public void TestMethodA(Action<int,int> paramFunc)
{
TestMethodB(paramFunc);
}
反过来,假设 TestMethodA
将此委托传递给另一个函数,后者最终调用它:
public void TestMethodB(Action<int,int> paramFunc)
{
paramFunc.Invoke(5,10);
}
现在,如果我想将另一个参数从 TestMethodA
传递给 TestMethodB`,该参数最终将用作委托的参数,该怎么办?这样做的最佳方法是这样的吗:
public void Main(string[] args)
{
TestMethodA(TestCallback);
}
public void TestMethodA(Action<int,int> paramFunc)
{
TestMethodB(paramFunc,10);
}
public void TestMethodB(Action<int,int> paramFunc,int paramForDelegate)
{
paramFunc.Invoke(5,paramForDelegate);
}
或者像这样:
public void Main(string[] args)
{
TestMethodA(TestCallback);
}
public void TestMethodA(Action<int,int> paramFunc)
{
TestMethodB((a,b) => paramFunc(a,10));
}
public void TestMethodB(Action<int,20); // 20 here is just a placeholder and will not be passed to the delegate
}
使用第一种方法时,方法签名需要携带要在委托中使用的所有参数。例如,如果我有更多的参数要传递并且有更多的链式调用,你可以想象这会很快变得丑陋。
使用第二种方法可以使方法签名更清晰,但我认为这也使代码更难破译,我不得不使用实际上不会传递给它的参数来调用我的委托。
是否有更好的方法来实现我所描述的?也就是说,传递一个委托以及调用时要传递给它的一些参数?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)