F# 使用命名元组作为函数参数

F# use named tuple as function parameter

我在 F# 中有以下类型:

type CodeNameError(CodeNameCombination: (Code*Name)[]) =
member this.CodeNameCombinations = CodeNameCombination

有没有办法在 F# 中将 (Code*Name)[] 转换为命名元组数组? 在 c# 中,我会做类似的事情:

public CodeNameError((Code code, Name name)[] codeName)
{
    CodeNameCombination = codeName
}

F# 的命名元组与 C# 的命名方式不同,但有几个替代方案。我的首选选项实际上是为 Code * Name 对定义一个新的记录类型。如果遇到需要命名的情况,记录是一个不错的选择,只需一行代码:

type NamedCode = { Name:Name; Code:Code }

type CodeNameError(codeNameCombination:NamedCode[]) =
  member this.CodeNameCombinations = codeNameCombination

CodeNameError [| { Code = "1+1"; Name = "test" } |]

如果您不想定义类型(但我不确定您为什么不想这样做),您可以使用匿名记录:

type CodeNameError(CodeNameCombination: {| code:Code; name:Name |}[]) =
  member this.CodeNameCombinations = CodeNameCombination

CodeNameError [| {| code = "1+1"; name = "test" |} |]