如何将C#元组转换为F#元组?
具体地说,我有一个Result类型的C#实现:
public class Result<T,E>
{
public Result(T data) => Ok = (true,data);
public Result(E data) => Error = (true,data);
public (bool,T) Ok { get; }
public (bool,E) Error { get; }
}
我想采用Ok结果或Error结果的元组值并将其用于我的F#代码中。
示例:
let result = databaseService.getSomething(userIdValue) |> Async.AwaitTask |> Async.RunSynchronously
let isSuccessful,forms = result.Ok
但是,我收到以下错误:
错误FS0001一种元组类型是结构元组,另一种是 参考元组
最后,我对如何将C#元组转换为F#元组感到困惑。 我找到了这个link。但是我无法利用它满足我的需求。
答案 0 :(得分:9)
C#7.0元组语法产生的ValueTuple值与F#元组(较旧的Tuple类)不同。 Luckilly自F#4.1开始就可以使用
let struct (isSuccessful, forms) = result.Ok
请注意模式中额外的struct
关键字。您可以使用相同的语法来创建新的ValueTuple
值,例如let tup = struct (true, 42)