[英]F# fsharp interop with C# library (CsvHelper)
我已經成功地使用庫CsvHelper在F#中進行了一些CSV操作(我無法使用Fsharp.Data CsvProvider完成這些操作)。
在他們的文檔中,他們通過以下方式操作標頭:
csv.Configuration.PrepareHeaderForMatch = header => header.Replace( " ", string.Empty );
我正在嘗試做類似的事情(將所有標頭更改為小寫),但是我還沒有弄清楚如何處理該委托。
我正在嘗試以下操作,但無法編譯。
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>
您看到的錯誤可能與類型不匹配有關,或者與不支持“相等”約束的函數類型有關。 這是因為表達式
csv.Configuration.PrepareHeaderForMatch = (fun header -> header.ToLower())
解析為運算符Microsoft.FSharp.Core.Operators.(=)
的調用,左側帶有屬性getter,右側帶有內聯函數定義。 相反,您需要一個賦值表達式expr <- expr
,在左側具有屬性設置器調用:
csv.Configuration.PrepareHeaderForMatch <- fun header -> header.ToLower()
在F#語言中, =
標記是造成混淆的常見原因,因為取決於上下文,它可以代表兩種不同的含義:
=
如上所述,或 let x = 42
編輯原來,所討論的屬性的預期類型為System.Func<System.Type, string, string>
,這意味着您需要提供一個額外的參數,該參數隨后將不再使用。 可以用通配符表示: fun _ header -> header.ToLower()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.