F# - int类型与类型单位不兼容

mko*_*ski 7 .net f# unit-type

功能语言还不是很新,但是我用很多F#维护别人的代码.任何人都可以提供一些洞察力吗?

        let mtvCap = Rendering.MTViewerCapture(mtViewer)
        mtvCap.GetCapture()
        mtvCap.ToWpfImage()
        grid.Children.Add(mtvCap.ImageElement)
Run Code Online (Sandbox Code Playgroud)

MTViewer.ImageViewer的类型为System.Windows.Controls.Image,而grid是System.Windows.Controls.Grid.

同样,错误是:int类型与类型单位不兼容

Jar*_*Par 14

F#不允许您以静默方式忽略返回值.类型unit是F#的版本void.所以错误基本上是在说

我希望语句没有返回,但它返回一个int值

或者相反.我倾向于错误地阅读此错误消息.

可能发生的事情是以下之一

  1. 有问题的方法是期望int返回值,但方法Add返回void,因此F#只是要求返回值
  2. 有问题的方法是输入,unit但是Add返回a int和F#需要你忽略该值.
  3. 需要显式处理的GetCaptureToWpfImage返回值.

对于最后两种情况,您可以通过将值传递给ignore函数来解决此问题

mtvCap.GetCapture() |> ignore
mtvCap.ToWpfImage() |> ignore
grid.Children.Add(mtvCap.ImageElement) |> ignore
Run Code Online (Sandbox Code Playgroud)

在挖掘了一下之后我相信#2是问题因为UIElementCollection.Add返回一个int值.尝试修改最后一行,如下所示

grid.Children.Add(mtvCap.ImageElement) |> ignore
Run Code Online (Sandbox Code Playgroud)