强制F#类型的字段为空

我很清楚选项的好处,但在这种情况下,我想避免出于性能原因使用选项.选项包装类中的类型,这意味着垃圾收集器的工作量更多 – 我想避免这种情况.

特别是在这种情况下,我有多个字段都是在相同情况下的一些字段,但我不想把它们放在一个元组中,因为元组是类 – 并且给GC带来了额外的压力.所以我最终访问field.Value – 这违背了选项的目的.

所以,除非有一个优化,我不知道这会导致选项类型被视为可能为null的引用,我想只使用null.有没有办法可以做到这一点?

编辑:为了扩展我正在做的事情,我正在制作一个bounding volume hierarchy,它实际上是一个二叉树,只在叶子节点上有数据.我将它作为一个类而不是作为一个有区别的联合实现,因为保持项目不可变不是出于性能原因的选择,并且有区别的联合不能有可变成员,只有refs – 再次,增加GC压力.

虽然在功能语言中很愚蠢,但我最终可能会将每个节点类型作为Node父类型的继承. Downcasting并不是最快的操作,但就XNA和WP7而言,几乎任何东西都比激怒GC更好.

最佳答案 根据
this MSDN documentation,如果使用[< AllowNullLiteral>]属性装饰类型,则可以调用Unchecked.defaultof< T>()为您构建null.

这似乎是F#中做你想做的事情的唯一方法.否则,您可以编写另一种.net语言并从那里获取空值…但我猜这根本不是你想要的

点赞