F#定义函数作为.net Action的委托

时间:2017-03-16 18:23:51

标签: f# delegates

System.Activities.WorkflowApplication中的

有一个委托属性:

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

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

我想定义一个F#函数来设置:

let f (e: WorkflowApplicationCompletedEventArgs) = 
    // body
myInst.Completed <- f

但这会产生错误:

  

错误102此表达式应具有类型       行动,但这里有类型       'a - &gt;单元

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

1 个答案:

答案 0 :(得分:6)

如果将匿名函数System.Action<...>传递给期望System.Func<...>let f = System.Action<WorkflowApplicationCompletedEventArgs>(fun e -> // body ) myInst.Completed <- f // Another solution: let f (e: WorkflowApplicationCompletedEventArgs) = // body myInst.Completed <- System.Action<_>(f) 的方法或构造函数,则会自动转换;在任何其他情况下,您需要像@Funk指示的那样明确地转换它。

if (filein != NULL) // Checks if the file was loaded. 
{
    while (fscanf(filein, "%d", &a) > 0)
    {
        sum += a;
    }
    printf("Sum = %d\n", sum); // prints to command window. 
    fclose(filein);
}