Передача структуры F # в C # - PullRequest
1 голос
/ 16 мая 2019

У меня следующая ошибка:

Library.fs(86, 40): [FS0193] Type constraint mismatch. The type 'struct (DateTime * Intervals * float * float) option list' is not compatible with type    'Collections.Generic.List<struct (DateTime * Intervals * float * float)>'

Проблема в том, что F # генерирует список опций struct, а C # ожидает взамен IEnumerable с теми же типами.

Как можночто будет преобразовано?

Редактировать: вот полное сообщение об ошибке:

Library.fs (80, 40): [FS0001] Тип 'struct (DateTime * Intervals * float)* список параметров с плавающей точкой) не совместим с типом Collections.Generic.List. Library.fs (80, 40): [FS0193] Несоответствие ограничения типа.Список опций типа struct (DateTime * Intervals * float * float) не совместим с типом Collections.Generic.List. Library.fs (81, 16): [FS0001] Тип '' опция 'не соответствуеттип 'unit'

Если я заполняю структуру полями, которые, как я знаю, не являются обязательными, я получаю ту же ошибку:

struct (DateTime.MinValue, Intervals.Тик, 0,0, 0,0)

Добавлен скриншот:

enter image description here

Редактировать:

Я добавилПреобразование ToList (), но это не помогло:

enter image description here

1 Ответ

3 голосов
/ 16 мая 2019

Чтобы создать List<T> из любого другого перечислимого (включая F # list), используйте метод расширения .ToList из System.Linq.Enumerable:

open System.Linq
...

db.AddQuotesList(Candle.Intervals.Tick, output.ToList())

Другой способ - использовать один из собственных конструкторов List, который принимает в качестве аргумента перечислимое значение:

open System.Collections.Generic
...

db.AddQuotesList(Candle.Intervals.Tick, List(output))

Имейте в виду, однако, что выполнение этого означает выделение памяти: List не является «ленивым», как IEnumerable, он выделит блок памяти для всех элементов при его создании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...