如何将C#元组转换为F#元组?

时间:2019-02-07 16:25:03

标签: f#

如何将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。但是我无法利用它满足我的需求。

1 个答案:

答案 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)