如果你想使用慣用的功能列表,那麼你可以這樣寫:
let func (param:(int64 * string) list) =
[ for n, s in param -> n, s, "new val" ]
我加了註釋(int64 * string) list
以確保你得到同樣類型的一個在C# 。如果你沒有添加它,那麼F#編譯器會推斷該函數是通用的 - 因爲它實際上並不關心元組前兩個元素的類型。註釋也可以使用param:list<int64 * string>
以C#風格的符號寫入,這可能更易於閱讀。
如果你想使用.NET List
型(通常不是在F#推薦),可以使用F#別名ResizeArray
寫:
let func (param:(int64 * string) ResizeArray) =
ResizeArray [ for n, s in param -> n, s, "new val" ]
這將創建一個F#列表,然後將其轉換爲.NET List<T>
類型。這應該給你與C#版本完全相同的公共IL簽名,但我會推薦使用F#特定類型。
作爲一個附註,第二個例子可以使用命令性的F#代碼來實現(使用for
來迭代元素,就像在C#中一樣)。這產生與C#完全相同的IL,但如果您稍後需要優化某些F#代碼,則此功能非常有用。所以我不建議這個版本(這也更長:-)):
let func (param:(int64 * string) ResizeArray) =
let res = new ResizeArray<_>()
for n, s in param do
res.Add(n, s, "new val")
res
你也可以使用更高階的功能,如List.map
寫:
let func (param:(int64 * string) list) =
params |> List.map (fun (n, s) -> n, s, "new val")