对函数式语言来说很新,但我正在使用大量 F# 维护其他人的代码。任何人都可以对此提供一些见解吗?
let mtvCap = Rendering.MTViewerCapture(mtViewer)
mtvCap.GetCapture()
mtvCap.ToWpfImage()
grid.Children.Add(mtvCap.ImageElement)
MTViewer.ImageViewer 是 System.Windows.Controls.Image 类型,网格是 System.Windows.Controls.Grid。
同样,错误是:类型 int 与类型 unit 不兼容
最佳答案
F# 不允许您静默忽略返回值。 unit
类型是 void
的 F# 版本。所以错误基本上是说
或者相反。我倾向于错误地阅读此错误消息。
可能发生的是以下情况之一
int
返回值,但 Add
方法返回 void 因此 F# 只是要求返回值 unit
但 Add
返回 int
并且 F# 需要您忽略该值。 GetCapture
或 ToWpfImage
返回值。 对于最后两种情况,您可以通过将值传递给
ignore
函数来解决此问题mtvCap.GetCapture() |> ignore
mtvCap.ToWpfImage() |> ignore
grid.Children.Add(mtvCap.ImageElement) |> ignore
在深入研究之后,我相信 #2 是问题所在,因为
UIElementCollection.Add
返回一个 int
值。尝试修改最后一行看起来像这样grid.Children.Add(mtvCap.ImageElement) |> ignore