【问题标题】:how to change library method signature C#如何更改库方法签名C#
【发布时间】:2019-04-27 07:47:22
【问题描述】:

我正在使用一些外部库,它们有一种方法,除了参数为 Func 类型。

    class LibClass
    {
        public void libMethod(Func<int, int, int> add)
        {
            add(5, 5);
        }

    } 

在我的控制台应用程序中,我正在消费

class Program
    {
        public static  int MyMethod(int a, int b) // want to pass third parameter 
        {
            return 0;
        }
        static void Main(string[] args)
        {

            LibClass obj = new LibClass();
            obj.libMethod(Program.MyMethod); 
            Console.Read();

        }
    }

我想将一些附加参数传递给 MyMethod(),但我无法传递它。那么如何更改库方法签名? 或者我如何将附加参数传递给 MyMethod()?

【问题讨论】:

  • 您不能更改库中函数的签名。为什么不能改MyMethod的签名?
  • 顺便说一句,libMethod 函数不需要 3 个参数 - 第三个 int 定义返回类型

标签: c# c#-7.0


【解决方案1】:

您必须从源代码重新编译库才能更改其方法,但我认为这可能是XY Problem。您无需更改签名即可将另一个参数传递给您的方法。示例:

int DoSomeMath(int a, int b, int x)
{
    return (a + b) * x;
}

如果您想让libMethod 调用DoSomeMath 并带有更多参数,您可以将其包装在一个lambda 中并添加您自己的:

void Main()
{
    LibClass obj = new LibClass();
    obj.libMethod((a, b) => DoSomeMath(a, b, 42));
    Console.Read();
}

lambda 将从libMethod 接收ab,将它们与42 一起传递给DoSomeMath,并将DoSomeMath 的返回值返回给libMethod

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2022-01-23
    相关资源
    最近更新 更多