我很了解 option
的好处,但在这种情况下,我想避免使用 option
出于性能原因。 option
在一个类中包装一个类型,这意味着垃圾收集器需要做更多的工作——我想避免这种情况。
特别是在这种情况下,我有多个字段都是 Some
在相同的情况下,但我不想把它们放在一个元组中,因为元组也是类——并且给 GC 带来了额外的压力。所以我最终访问了field.Value
-- 这违背了 option
的目的.
所以除非有我不知道的优化导致option
类型被视为可能为空的引用,我只想使用 null
.有没有办法我可以做到这一点?
编辑:为了扩展我正在做的事情,我正在制作 bounding volume hierarchy ,它实际上是一棵二叉树,数据仅在叶节点处。我将它作为一个类而不是作为一个受歧视的联合来实现,因为出于性能原因保持项目不可变不是一种选择,并且受歧视的联合不能有 mutable
成员(member),仅限 ref
s - 再次增加 GC 压力。
尽管在函数式语言中很愚蠢,但我最终可能只是将每个节点类型都作为 Node
的继承。父类型。 Downcasting并不是最快的操作,但就 XNA 和 WP7 而言,几乎任何事情都比激怒 GC 更好。
最佳答案
根据this MSDN documentation , 如果你用 [<AllowNullLiteral>]
装饰你的类型属性,然后您可以调用 Unchecked.defaultof<T>()
为您构建一个空值。
这似乎是 F# 中做你想做的事的唯一方法。否则,你可以编码到另一种 .net 语言并从那里得到空值......但我猜这根本不是你想要的
关于f# - 强制 F# 类型的字段为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8707042/