我写了一个F#模块,里面有一个列表:
module MyModule
type X =
{
valuex : float32
}
let l = [ for i in 1 .. 10 -> {valuex = 3.3f}]
Run Code Online (Sandbox Code Playgroud)
现在从C#类我试图访问以前定义的列表,但我不知道如何转换它:
... list = MyModule.l ; //here's my problem
Run Code Online (Sandbox Code Playgroud)
我需要这样的东西:
IList<X> list = MyModule.l;
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Ani*_*Ani 10
很简单:
IList<MyModule.X> list = MyModule.l.ToList();
Run Code Online (Sandbox Code Playgroud)
您需要转换方法而不是强制转换/隐式转换的原因是因为它FSharpList<T>实现IEnumerable<T>但不是IList<T>因为它表示不可变的链表.
请注意,您必须FSharp.Core在C#项目中包含作为参考.
的FSharpList<T>(这是F#的净名称list<T>类型)没有实现IList<T>,因为它没有任何意义.
IList<T>用于访问和修改可以通过索引访问的集合,而list<T>不是.要从C#中使用它,您可以显式使用该类型:
FSharpList<MyModule.X> l = MyModule.l;
var l = MyModule.l; // the same as above
Run Code Online (Sandbox Code Playgroud)
或者您可以使用它实现的事实IEnumerable<T>:
IEnumerable<MyModule.X> l = MyModule.l;
Run Code Online (Sandbox Code Playgroud)
或者,如果您确实需要IList<T>,可以使用LINQ ToList(),就像Ani建议的那样:
IList<MyModule.X> l = MyModule.l.ToList();
Run Code Online (Sandbox Code Playgroud)
但是你必须记住F#list是不可变的,所以没有办法修改它.
| 归档时间: |
|
| 查看次数: |
408 次 |
| 最近记录: |