У меня есть следующее объявление в F#:
type ConstArg =
| Bool of bool
| CharArray of char[]
member Lambda (ConstArg : ConstArg[]) = ...
В C# я создал массив char[] из двух значений:
char[][] list = new char[][] {firstArray, secondArray};
Я хочу вызвать .Lambda(list)
, но не могу преобразовать список в ConstArg[]
Тип размеченного объединения F# в C# — это класс со статическими методами создания NewXXX
для случаев размеченного объединения. В вашем случае будет метод с подписью
public static ConstArg NewCharArray(char[] item)
Вы должны использовать этот метод для преобразования каждого массива символов в экземпляр типа ConstArg
:
Lambda(list.Select(ConstArg.NewCharArray).ToArray())
// or without LINQ
Lambda(Array.ConvertAll(list, ConstArg.NewCharArray))
Обратите внимание, что имена параметров в F# должны быть в верблюжьем регистре в соответствии с соглашениями об именах
@islamhamdi ваш список будет содержать объекты ConstArg
, потому что и CharArray
, и Bool
являются экземплярами типа ConstArg
. Так что не будет проблем с передачей его в лямбду.
Замечательно! Спасибо @Сергей. У вас есть идея, если мой
list
представляет собой смесь союзов (например: [CharArray, Bool]), и я хочу создать лямбду с общимConstArg
?