我正在使用一些外部库,该库具有一种除参数作为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()?
答案 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
接收b
和libMethod
,并将它们与42
一起传递到DoSomeMath
,并返回{{1 }}返回DoSomeMath
。