如何将列表从C#传递给F#?

时间:2008-12-23 21:52:06

标签: c# f#

我知道f#列表中的f#列表不一样。为了能够将c#应用程序中的int列表传递给f#库,我需要做什么?我希望能够在f#代码中对数据进行模式匹配。

4 个答案:

答案 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#程序集。通过引用的程序集公开您的列表。