Доступ к списку F #> внутри кода C # - PullRequest
1 голос
/ 24 ноября 2011

это расширение моей предыдущей темы .Я думал, что доступ к 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();

, но это не скомпилировать.
Может кто-то, кто является моей ошибкой?

1 Ответ

6 голосов
/ 24 ноября 2011

В этом случае тип свойства 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 #, поэтому я бы держался подальше от этих преобразований, если бы в этом не было крайней необходимости.

EDIT :

Если вы простонужно перебрать элементы, все что вам нужно это цикл:

foreach(var innerList in MyModule.l)
{
    foreach(var item in innerList)
    {
        Console.WriteLine(item.valuex);
    }     
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...