访问f# List>从c#代码内部
本文关键字:List 代码 内部 访问 | 更新日期: 2023-09-27 18:15:44
这是我以前的线程的扩展。我认为访问List<List<>>
将非常类似于一个简单的列表,但我有一些问题。
下面是f#代码:
type X =
{
valuex : int
}
let l =
[
for i in 1 .. 10 ->
[
for j in 1 .. 10 ->
{valuex = i * j}
]
]
根据我之前的文章,我尝试在c#代码中做以下事情:
IList<IList<MyModule.X>> list = MyModule.l.ToList();
但是这不能编译。
有人能告诉我哪是我的错吗?
在这种情况下,属性的类型是FSharpList<FSharpList<MyModule.X>>
,所以你必须将每个内部FSharpList映射到IList<T>
,然后将结果序列具体化到列表(列表的)。
这看起来像:
IList<IList<MyModule.X>> list = MyModule.l
.Select(inner => (IList<MyModule.X>) inner.ToList())
.ToList();
你真的需要所有这些精确的转换吗?这个集合已经是一个IEnumerable<IEnumerable<T>>
了,这个事实难道还不够好吗?事实上,FSharpList<T>
本身就是c#中非常有用的类型,所以除非绝对必要,否则我不会使用这些转换。
编辑:
如果你只需要迭代元素,你所需要的只是一个循环:
foreach(var innerList in MyModule.l)
{
foreach(var item in innerList)
{
Console.WriteLine(item.valuex);
}
}