无法将 C# 对象转换为 F# 类型

Unable to cast C# object in F# type

我在 F# 中有以下声明:

type ConstArg =
    | Bool of bool
    | CharArray of char[]

member Lambda (ConstArg : ConstArg[]) = ...

在 C# 中,我构造了一个包含两个值的 char[] 数组:

char[][] list = new char[][] {firstArray, secondArray};

我确实想调用 .Lambda(list) 但我无法将列表转换为 ConstArg[]

C# 中的 F# 可区分联合类型是 class 具有用于可区分联合案例的静态创建方法 NewXXX。在您的情况下,将有带有签名的方法

public static ConstArg NewCharArray(char[] item)

您应该使用此方法将每个字符数组转换为 ConstArg 类型的实例:

Lambda(list.Select(ConstArg.NewCharArray).ToArray())

// or without LINQ
Lambda(Array.ConvertAll(list, ConstArg.NewCharArray))

请注意,F# 中的参数名称应按照 naming conventions

的驼峰式命名