簡體   English   中英

從C#代碼內部訪問F#列表

[英]Accessing an F# list from inside C# code

我寫了一個F#模塊,里面有一個列表:

module MyModule
type X = 
    {
        valuex : float32
    }
let l = [ for i in 1 .. 10 -> {valuex =  3.3f}]

現在從C#類嘗試訪問先前定義的列表,但是我不知道如何轉換它:

... list = MyModule.l ; //here's my problem

我需要類似的東西:

IList<X> list = MyModule.l;

我該如何實現?

簡單如:

IList<MyModule.X> list = MyModule.l.ToList();

之所以需要轉換方法而不是FSharpList<T>轉換/隱式轉換,是因為FSharpList<T>實現IEnumerable<T>而不是IList<T>因為它表示不可變的鏈表。

請注意,您必須在C#項目中包括FSharp.Core作為參考。

FSharpList<T> (這是F# list<T>類型的.Net名稱)沒有實現IList<T> ,因為它沒有意義。

IList<T>用於訪問和修改可以通過索引訪問的集合,而list<T>不是。 要從C#中使用它,可以顯式使用該類型:

FSharpList<MyModule.X> l = MyModule.l;
var l = MyModule.l; // the same as above

或者,您可以使用它實現IEnumerable<T>的事實:

IEnumerable<MyModule.X> l = MyModule.l;

或者,如果確實需要IList<T> ,則可以使用LINQ的ToList() ,如Ani建議的那樣:

IList<MyModule.X> l = MyModule.l.ToList();

但是您必須記住F#列表是不可變的,因此無法對其進行修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM