Совершенно новый для функциональных языков, но я поддерживаю чужой код с большим количеством F #. Кто-нибудь может предложить некоторое понимание этого?
let mtvCap = Rendering.MTViewerCapture(mtViewer)
mtvCap.GetCapture()
mtvCap.ToWpfImage()
grid.Children.Add(mtvCap.ImageElement)
MTViewer.ImageViewer имеет тип System.Windows.Controls.Image, а grid - System.Windows.Controls.Grid.
Опять же, ошибка: тип int не совместим с типом unit
F # не позволяет вам молча игнорировать возвращаемые значения. Тип unit
является версией void
на F #. Таким образом, ошибка, по сути, говорит
, что я ожидал, что инструкция не будет иметь возврата, но вместо этого она вернет значение типа int
Или наоборот. Я склонен неправильно читать это сообщение об ошибке.
Вероятно, происходит одно из следующих событий
int
, но метод Add
возвращает void, следовательно, F # просто запрашивает возврат value 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
Я очень мало знаю о F #, но, насколько я помню, «unit» - это их способ сказать «void», так что я предполагаю, что вы пытаетесь присвоить «возвращаемое значение "функции, у которой его нет, в переменную. Наиболее вероятным кандидатом будет эта строка:
let mtvCap = Rendering.MTViewerCapture (mtViewer)