如何更改库方法签名C#

时间:2019-04-27 07:47:22

标签: c# c#-7.0

我正在使用一些外部库,该库具有一种除参数作为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()?

1 个答案:

答案 0 :(得分:2)

您必须从源代码重新编译库才能更改其方法,但是我认为这可能是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将从a接收blibMethod,并将它们与42一起传递到DoSomeMath,并返回{{1 }}返回DoSomeMath