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