将F#结构传递给C#

时间:2019-05-16 17:23:23

标签: f#

我遇到以下错误:

status_group

问题是F#生成了一个结构选项列表,而C#希望使用一个具有相同类型的IEnumerable。

如何转换?

编辑: 这是完整的错误消息:

  

Library.fs(80,40):[FS0001]类型'struct(DateTime * Intervals * float * float)选项列表'与类型'Collections.Generic.List'不兼容     Library.fs(80,40):[FS0193]类型约束不匹配。类型'struct(DateTime * Intervals * float * float)选项列表'与类型'Collections.Generic.List'不兼容     Library.fs(81,16):[FS0001]类型“ a option”与类型“ unit”不匹配

如果我用我知道的字段不是可选字段填充结构,则会出现相同的错误:

  

struct(DateTime.MinValue,Intervals.Tick,0.0,0.0)

添加了屏幕截图:

enter image description here

编辑:

我添加了ToList()转换,但没有帮助:

enter image description here

1 个答案:

答案 0 :(得分:3)

要从其他任何可枚举的对象(包括F#List<T>)中创建list,请使用System.Linq.Enumerable中的.ToList extension method

open System.Linq
...

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

另一种方法是使用List自己的构造函数之一,该构造函数将枚举作为参数:

open System.Collections.Generic
...

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

但是请记住,这样做意味着内存分配:List并不像IEnumerable那样“懒惰”,它将在构造它时为所有项目分配一个内存块。 / p>