[英]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.