F#列表到C#IEnumerable:最有效的方法?
我目前正在开发一个用C语言编写GUI的F#库,我想问一下,将F#(通用)列表传递给C#代码(通用IEnumerable)的最佳或正确方法是什么 到目前为止,我找到了三种方法:F#列表到C#IEnumerable:最有效的方法?,c#,.net,list,f#,seq,C#,.net,List,F#,Seq,我目前正在开发一个用C语言编写GUI的F#库,我想问一下,将F#(通用)列表传递给C#代码(通用IEnumerable)的最佳或正确方法是什么 到目前为止,我找到了三种方法: [1; 2; 3; 4; 5;] |> List.toSeq [1; 2; 3; 4; 5;] |> Seq.ofList [1; 2; 3; 4; 5;] :> seq<int> [1;2;3;4;5;]|>List.toSeq [1;2;3;4;5;] [1;2;3;4;5;]:>
[1; 2; 3; 4; 5;] |> List.toSeq
[1; 2; 3; 4; 5;] |> Seq.ofList
[1; 2; 3; 4; 5;] :> seq<int>
[1;2;3;4;5;]|>List.toSeq
[1;2;3;4;5;]
[1;2;3;4;5;]:>序号
请问这三种方法在实际应用上有什么不同吗?如果您查看F#library源代码,您会发现它们都是相同的:
正如您所看到的,只需调用Seq.ofList
List.ofSeq
是使用List.toSeq
实现的,如您所见s:>seq
Seq.ofList
或List.toSeq
,特别是如果代码是更大的F#管道的一部分,因为这样做会使代码更好一些:
someInput
|> List.map (fun x -> whatever)
|> List.toSeq
关于Tomas的优秀答案,我的一般建议是使用
Seq.ofList
还是List.toSeq
,问自己“我的代码在用什么?”如果(在本例中)你有一个列表,并且你想生成一个Seq/IEnumerable供其他代码使用,那么就使用List.toSeq
。如果您已收到一个列表,并且希望为您自己的代码获取一个seq,请使用seq.ofList
。换句话说,在代码的这一特定部分中,选择与数据流的“方向”最匹配的函数。如果使用nugetFSharp.Core.Fluent
,您将能够在列表中点入如下内容:[1;2;3].toSeq()
。