【发布时间】:2019-03-25 01:13:11
【问题描述】:
尝试将 Action 传递给 F# 代码会在 .net 4.6.1、VS2015 中产生以下语法错误...
Error CS1503 Argument 1:
cannot convert from 'System.Action<string>' to
'Microsoft.FSharp.Core.FSharpFunc<string, Microsoft.FSharp.Core.Unit>'
尝试如下……
using Microsoft.FSharp.Core;
....
Action<string> logger = Console.WriteLine;
App.perform(new Action<string>(Console.WriteLine), args);
App.perform(logger, args);
App.perform(new Action<string>(msg => Console.WriteLine(msg)), args);
App.perform((new Action<string>(msg => Console.WriteLine(msg))), args);
App.perform((new Func<string,Unit>(msg => Console.WriteLine(msg))), args);
App.perform(new Func<string,Unit>(Console.WriteLine), args);
将System.Console.WriteLine 从 C# 传递到 F# 的正确方法是什么?
【问题讨论】:
-
我不清楚,你想做什么?您是否尝试从 F# 打印到控制台?
-
正如错误消息非常清楚地指出的那样,F# 函数需要
FSharpFunc<_>类型的参数。为什么你一直试图将Action或Func传递给它? -
我使用
C#包装器通过我最近开发的F#库访问VS2015中的部署基础架构。该库接受Console.WriteLine符合要求的记录器。我想一种选择是直接从库中访问Console.WriteLine。但是,将void强制转换为unit很有用。