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

Sco*_*rod 3 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; }
}
Run Code Online (Sandbox Code Playgroud)

我想取一个Ok结果或Error结果的元组值,并在我的F#代码中使用它.

例:

let result = databaseService.getSomething(userIdValue) |> Async.AwaitTask |> Async.RunSynchronously

let isSuccessful,forms = result.Ok
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

错误FS0001一个元组类型是一个struct元组,另一个是参考元组

总之,我对如何将C#元组转换为F#元组感到困惑.我找到了这个链接.但我无法利用它来满足我的需求.

Hon*_*tan 9

C#7.0元组语法生成的ValueTuple值与F#元组(旧的Tuple类)不同.Luckilly自F#4.1以来你可以使用

let struct (isSuccessful, forms) = result.Ok
Run Code Online (Sandbox Code Playgroud)

注意模式中的额外struct关键字.您可以使用相同的语法来创建新ValueTuple值,例如let tup = struct (true, 42)