F# fsharp 与 C# 库 (CsvHelper) 互操作
F# fsharp interop with C# library (CsvHelper)
我已经成功地使用库 CsvHelper 在 F# 中执行一些 CSV 操作(我无法使用 Fsharp.Data CsvProvider 完成的事情)。
在他们的文档中,他们通过以下方式操纵 headers:
csv.Configuration.PrepareHeaderForMatch = header => header.Replace( " ", string.Empty );
我正在尝试做类似的事情(将所有 headers 更改为小写),但我还没有弄清楚如何处理这个委托。
我正在尝试以下操作,但无法编译。
csv.Configuration.PrepareHeaderForMatch = (fun header -> header.ToLower())
非常感谢任何帮助。
谢谢。
我已经尝试过@kaefer 建议分配 "PrepareHeaderForMatch",因为它是 C# getter;setter;
csv.Configuration.PrepareHeaderForMatch <- fun header -> header.ToLower()
如我的评论所述,编译器抱怨类型不匹配,因为 c# 属性 期望:
System.Func<System.Type, string, string>
您看到的错误可能与类型不匹配有关,或者与不支持 'equality' 约束的函数类型有关。这是因为表达式
csv.Configuration.PrepareHeaderForMatch = (fun header -> header.ToLower())
解析为运算符 Microsoft.FSharp.Core.Operators.(=)
的调用,左侧为 属性 getter,右侧为内联函数定义。相反,你想要一个赋值表达式 expr <- expr
,在左侧有一个 属性 setter 调用:
csv.Configuration.PrepareHeaderForMatch <- fun header -> header.ToLower()
在 F# 语言中,=
标记是一个常见的混淆来源,因为根据上下文,它可以代表两种不同的事物:
- 通用相等运算符
=
,如上,或
- 值、函数、类型或成员定义上下文中的绑定,例如
let x = 42
Edit 事实证明,所讨论的 属性 的预期类型是 System.Func<System.Type, string, string>
,这意味着您需要提供一个额外的参数随后不要使用。可以用通配符表示:fun _ header -> header.ToLower()
我已经成功地使用库 CsvHelper 在 F# 中执行一些 CSV 操作(我无法使用 Fsharp.Data CsvProvider 完成的事情)。
在他们的文档中,他们通过以下方式操纵 headers:
csv.Configuration.PrepareHeaderForMatch = header => header.Replace( " ", string.Empty );
我正在尝试做类似的事情(将所有 headers 更改为小写),但我还没有弄清楚如何处理这个委托。
我正在尝试以下操作,但无法编译。
csv.Configuration.PrepareHeaderForMatch = (fun header -> header.ToLower())
非常感谢任何帮助。
谢谢。
我已经尝试过@kaefer 建议分配 "PrepareHeaderForMatch",因为它是 C# getter;setter;
csv.Configuration.PrepareHeaderForMatch <- fun header -> header.ToLower()
如我的评论所述,编译器抱怨类型不匹配,因为 c# 属性 期望:
System.Func<System.Type, string, string>
您看到的错误可能与类型不匹配有关,或者与不支持 'equality' 约束的函数类型有关。这是因为表达式
csv.Configuration.PrepareHeaderForMatch = (fun header -> header.ToLower())
解析为运算符 Microsoft.FSharp.Core.Operators.(=)
的调用,左侧为 属性 getter,右侧为内联函数定义。相反,你想要一个赋值表达式 expr <- expr
,在左侧有一个 属性 setter 调用:
csv.Configuration.PrepareHeaderForMatch <- fun header -> header.ToLower()
在 F# 语言中,=
标记是一个常见的混淆来源,因为根据上下文,它可以代表两种不同的事物:
- 通用相等运算符
=
,如上,或 - 值、函数、类型或成员定义上下文中的绑定,例如
let x = 42
Edit 事实证明,所讨论的 属性 的预期类型是 System.Func<System.Type, string, string>
,这意味着您需要提供一个额外的参数随后不要使用。可以用通配符表示:fun _ header -> header.ToLower()