访问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();

但是这不能编译。
有人能告诉我哪是我的错吗?

访问f# List<List<>>从c#代码内部

在这种情况下,属性的类型是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);
    }     
}