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

3

我在 F# 中有以下声明:

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

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


在 C# 中,我构建了一个包含两个值的 char[] 数组:
char[][] list = new char[][] {firstArray, secondArray};

我想要调用.Lambda(list),但我无法将list转换为ConstArg[]

1个回答

3

C#中的F#鉴别联合类型是一个类,具有用于鉴别联合情况的静态创建方法NewXXX。在您的情况下,将有一个具有如下签名的方法:

public static ConstArg NewCharArray(char[] item)

你应该使用这种方法将每个字符数组转换为 ConstArg 类型的实例:
Lambda(list.Select(ConstArg.NewCharArray).ToArray())

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

请注意,根据命名约定,F# 中的参数名称应该是驼峰式。 命名约定

太好了!谢谢@Sergey。 你有没有想法,如果我的“list”是联合的混合(即:[CharArray,Bool]),我想创建一个带有通用“ConstArg”的lambda? - islamhamdi
@islamhamdi,你的列表将包含ConstArg对象,因为CharArrayBool都是ConstArg类型的实例。因此,将其传递给lambda不会有任何问题。 - Sergey Berezovskiy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接