F#list to C#IEnumerable:最有效的方法?

eMk*_*Mko 10 .net c# f# list 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>
Run Code Online (Sandbox Code Playgroud)

请问这三种方法有什么实际区别吗?

Tom*_*cek 16

如果查看F#库源代码,您会发现它们都是相同的:

在可读性方面,我可能会使用Seq.ofList或者List.toSeq,特别是如果代码是更大的F#管道的一部分,因为它使代码更好一些:

someInput
|> List.map (fun x -> whatever) 
|> List.toSeq
Run Code Online (Sandbox Code Playgroud)

  • 为了扩展Tomas的优秀答案:我对是否使用`Seq.ofList`或`List.toSeq`的一般建议是问自己"我的代码使用的是什么?" 如果(如本例所示)你有一个列表,并且你想为其他代码生成一个seq/IEnumerable,那么使用`List.toSeq`.如果您收到了一个列表,并且想要获取自己的代码要使用的seq,请使用`Seq.ofList`.换句话说,选择与代码的这个特定部分中的数据流"方向"最匹配的函数. (4认同)
  • 如果你nuget`FSharp.Core.Fluent`你将能够点入列表,如:`[1; 2; 3] .toSeq()`. (2认同)