繁体   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