我知道f#列表中的f#列表不一样。为了能够将c#应用程序中的int列表传递给f#库,我需要做什么?我希望能够在f#代码中对数据进行模式匹配。
答案 0 :(得分:8)
您可以使用
Seq.toList : IEnumerable<'a> -> list<'a>
将任何IEnumerable<'a>
seq
转换为F#列表。请注意,F#列表是不可变的;如果你想使用可变列表,你不需要做任何特殊的事情,但你将无法使用模式匹配。或者,您可以定义System.Collections.Generic.List<'a>
的活动模式;这只是一个坏主意。
答案 1 :(得分:3)
以下是我最终如何做到这一点。
FSharp代码:
let rec FindMaxInList list =
match list with
| [x] -> x
| h::t -> max h (FindMaxInList t)
| [] -> failwith "empty list"
let rec FindMax ( array : ResizeArray<int>) =
let list = List.ofSeq(array)
FindMaxInList list
c夏普代码:
List<int> myInts = new List<int> { 5, 6, 7 };
int max = FSModule.FindMax(myInts);
答案 2 :(得分:1)
您可以传递一系列整数 - 它基本上都是支持IEnumerable<int>
的任何内容。
答案 3 :(得分:0)
您可以从F#项目中引用C#程序集。通过引用的程序集公开您的列表。