Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#列表到C#IEnumerable:最有效的方法?_C#_.net_List_F#_Seq - Fatal编程技术网

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;]:>

我目前正在开发一个用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;]:>序号
请问这三种方法在实际应用上有什么不同吗?

如果您查看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
。换句话说,在代码的这一特定部分中,选择与数据流的“方向”最匹配的函数。如果使用nuget
FSharp.Core.Fluent
,您将能够在列表中点入如下内容:
[1;2;3].toSeq()