gpt4 book ai didi

c# - 传递带有额外参数的委托(delegate)函数

转载 作者:可可西里 更新时间:2023-11-01 08:39:43 30 4
gpt4 key购买 nike

我有一个如下所示的委托(delegate):

public delegate bool ApprovalPrompt(ApprovalType type, int receipt, params string[] info);

我接受这种类型的委托(delegate)作为我要调用的函数的参数。但是,在一个特定的调用函数中,我想将一些额外的数据传递给与该委托(delegate)匹配的函数。

这是实现函数的签名:

private static bool LogApprovalNeeded(FraudFilterUtilities.ApprovalType type, int receipt, params string[] info)

它的调用如下:

PrepareReceipt(LogApprovalNeeded);

我希望它是:

private static bool LogApprovalNeeded(Customer cust, FraudFilterUtilities.ApprovalType type, int receipt, params string[] info)

理想情况下使用如下:

PrepareReceipt(LogApprovalNeeded(myCustomer))

我怎样才能完成这样的事情?我宁愿不需要在类中声明一个字段来保存一个函数和回调之间的 Customer 参数...

最佳答案

您可以使用 lambda 来“柯里化(Currying)”您的函数:

PrepareReceipt((type, receipt, info) => 
LogApprovalNeeded(myCustomer, type, receipt, info))

柯里化(Currying)函数是一种正式术语,用于存储对函数的引用,但具有一个或多个“固定”参数,从而改变方法的签名。

当您的函数签名不需要委托(delegate)提供的所有参数时,您也可以使用 lambda;您可以通过不传递 lambda 中的所有参数来有效地丢弃参数。

关于c# - 传递带有额外参数的委托(delegate)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14324803/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com