Ошибка не вызвана проблемами взаимодействия C # / F #.Когда вы вызываете b()
, он пытается получить доступ к значению параметра «Значение Нет», которое выдает исключение нулевой ссылки во время выполнения.
В библиотеке F # попробуйте заменить let aa:AA option = None
на let aa:AA option = Some(AA())
.Код C # должен затем напечатать 'xx'.
Когда вы открываете тип опции F # для внешнего мира, вы можете разрешить пустое возвращаемое значение из пустой опции вместо исключения.Например:
module Module1
//attribute needed in order to be able to return null from the match statement
[<AllowNullLiteralAttribute>]
type AA() =
let _a = "xx"
member x.a = _a
let aa:AA option = None
let b() = match aa with
| None -> null
| Some value -> value
И проверьте наличие нуля в любом коде, который использует эту библиотеку F #.
Обратите внимание на атрибут AllowNullLiteral
.Попробуйте закомментировать этот атрибут, и вы увидите, что F # не распознает значение null в первой ветви соответствия.