В F #, если вы определяете новый класс или другой тип в коде F #, то он будет по умолчанию не обнуляемым в том смысле, что, например,
type MyClass() = ...
...
let x : MyClass = null // does not compile
Однако он компилируется в код .NET IL как класс, который является ссылочным типом в .NET, который может иметь значение null, и, следовательно, либо C # может создавать пустые значения этого типа, либо даже в F #
let x : MyClass = Unchecked.defaultOf<MyClass>
даст вам ноль. Таким образом, в этом смысле, это очень «ограничение времени выполнения» - вы никогда не сможете создать язык .NET, который может «представить класс в C # так, чтобы он выглядел как нормальный класс», а также «гарантировать, что экземпляры этот тип никогда не бывает нулевым ". Таким образом, вы всегда должны принимать прагматичные решения здесь. F # пытается предотвратить несчастные случаи и раздражение, связанные с нулем, когда вы остаетесь внутри F #, но если вы имеете дело с деталями взаимодействия или среды выполнения .NET, в конце дня null всегда остается без ответа. (Ошибка в миллиард долларов.)