2017-04-07 48 views
4

備註:這是一個自我記錄,但如果您有任何其他建議,或者如果我犯了任何錯誤/錯過了某些顯而易見的內容,我將非常感謝您的幫助。在C#列表和F#列表之間轉換

來源:

convert .NET generic List to F# list

What can I do to pass a list from C# to F#?

https://msdn.microsoft.com/en-us/library/4kf43ys3(v=vs.110).aspx?cs-save-lang=1&cs-lang=fsharp#code-snippet-1


我在F#和C#初學者,我想一個C#列表轉換爲F#名單,反之亦然。這樣做的代碼/命令根據代碼的位置(使用C#或F#)而變化。

請參閱下面的答案。如果您有任何其他建議,請告訴我。謝謝。

+0

我認爲將答案放在答案中並且不在問題本身中保留答案是適當的。 – naslund

+0

已注意。我在下面提出了我的答案。謝謝。 –

回答

5

裏面一個C#文件,我可以使用ListModule.OfSeq.ToList(),像這樣:

// Currently inside a C# document 
var CS_list = new List<int> {1,2,3}; 
var FS_list = ListModule.OfSeq(CS_List); // Microsoft.FSharp.Collections.ListModule 
var CS_converted_back = FS_List.ToList(); 

內的F#的文件,我可以使用Seq.toListResizeArray<_>,像這樣:

// Currently inside an F# document 
let FS_list = [1;2;3] 
let CS_list = ResizeArray<int> FS_list // System.Collections.Generic.List 
let FS_converted_back = Seq.toList CS_list 

如果我犯了什麼錯誤,或者如果我錯過了一些明顯的事情,請告訴我。

+1

您可以使用'Seq.toList'或'List.ofSeq'。問題是你爲什麼要轉換爲'Seq'模塊幾乎與'List'模塊具有相同的功能。 –

+1

@DavidRaab,對於模式匹配,列表的效果更好,但總的來說,我同意,在使用其他.net語言時,只需使用Seq。 – monoceres

+0

@monoceres是的,我認爲它不重要。列表上的模式匹配對編寫自己的低級遞歸函數很有用。你也可以用'List.head'和'List.tail'來寫它們,而不是使用模式匹配。然後那些很好地轉換爲'Seq.head'和'Seq.tail'。但是在那種情況下,我想使用'seq {}'計算表達式更好。 –