微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

传递要在委托中使用的委托和参数以发挥作用

如何解决传递要在委托中使用的委托和参数以发挥作用

我有一个方法想用作回调。让我们说如下:

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 举报,一经查实,本站将立刻删除。