F# 定义函数以充当 .net 操作的委托(delegate)

标签 f# delegates

在 System.Activities.WorkflowApplication 中有一个委托(delegate)属性:

        public Action<WorkflowApplicationCompletedEventArgs> Completed { get; set; }

到目前为止,在我的程序中,我有一个变量是此类的实例

我想定义一个 F# 函数来设置它:
let f (e: WorkflowApplicationCompletedEventArgs) = 
    // body
myInst.Completed <- f

但这会产生错误:

Error 102 This expression was expected to have type Action but here has type 'a -> unit



如何完成函数“f”以满足编译器的要求?

最佳答案

如果你传递一个匿名函数 fun a -> ...到期望 System.Action<...> 的方法或构造函数或 System.Func<...> ,则自动转换;在任何其他情况下,您需要像@Funk 指示的那样显式转换它。

let f = System.Action<WorkflowApplicationCompletedEventArgs>(fun e ->
    // body
)
myInst.Completed <- f

// Another solution:

let f (e: WorkflowApplicationCompletedEventArgs) = 
    // body
myInst.Completed <- System.Action<_>(f)

关于F# 定义函数以充当 .net 操作的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42842035/

相关文章:

ios - Swift 4 – 带有协议(protocol)的自定义警报

c# - F# 错误类型 'X' 与类型 'X' 不兼容

asynchronous - F# 中异步操作的顺序执行链接

constructor - 构造期间递归访问对象

iphone - 如何判断哪个控件被触摸了?

c# - 使用传递给方法的 lambda 表达式会减慢 Entity Framework 查询的速度吗?

ios - 如何访问主UIViewController中嵌入父collectionViewCell中的collectionView?

c# - c# 中多播委托(delegate)中的执行顺序

multithreading - 加入第一个完成的线程?

F# 与可选元组列表的模式匹配