F # - El tipo int no es compatible con el tipo de unidad
Pregunta
bastante nuevo a los lenguajes funcionales, pero estoy mantener el código de otra persona con una gran cantidad de F #. Puede ofrecer a nadie una idea de esto?
let mtvCap = Rendering.MTViewerCapture(mtViewer)
mtvCap.GetCapture()
mtvCap.ToWpfImage()
grid.Children.Add(mtvCap.ImageElement)
MTViewer.ImageViewer es de tipo System.Windows.Controls.Image, y la rejilla es System.Windows.Controls.Grid.
Una vez más, el error es: El tipo int no es compatible con la unidad de tipo
Solución
F # no permite hacer caso omiso de los valores de retorno en silencio. El tipo unit
es la versión F # 's de void
. Así que el error está diciendo esencialmente
Me esperaba que la declaración no tener retorno, sino que devuelve un valor int
O lo contrario. Tiendo a leer correctamente este mensaje de error.
Lo más probable ocurra es uno de los siguientes
- El método en cuestión está a la espera de un valor de retorno
int
pero el métodoAdd
retornos vacíos por lo tanto, F # está solamente pidiendo un valor de retorno - El método en cuestión se escribe como
unit
peroAdd
devuelve unint
y F # que tiene que pasar por alto el valor. - Los valores de retorno o
GetCapture
ToWpfImage
que deben manejarse de manera explícita.
En los últimos 2 casos se puede solucionar este pasando el valor de la función ignore
mtvCap.GetCapture() |> ignore
mtvCap.ToWpfImage() |> ignore
grid.Children.Add(mtvCap.ImageElement) |> ignore
Después de cavar alrededor de un pedacito Creo # 2 es el tema porque UIElementCollection.Add
devuelve un valor int
. Intente modificar la línea final para tener este aspecto
grid.Children.Add(mtvCap.ImageElement) |> ignore
Otros consejos
Me sabe muy poco acerca de F #, pero por lo que recuerdo, "unidad" es su manera de decir "vacío", por lo que voy a suponer que usted está tratando de asignar el "valor de retorno" de una función que doesn' t tiene uno, a un varaible. Eso haría que el candidato más probable es que esta línea:
let mtvCap = Rendering.MTViewerCapture(mtViewer)