为什么空检查会导致F#中的相等约束?
如果将泛型类型与为什么空检查会导致F#中的相等约束?,f#,type-constraints,F#,Type Constraints,如果将泛型类型与null(并且仅与null)进行比较,这将导致编译器将该类型约束为可空(这是正常的)和可相等 为什么是后者?对于可为null但不支持相等的类型,似乎仅与null进行比较就可以了 我知道我可以使用取消选中。equals来获得可为null的约束,只是想知道我是否缺少一些明显的原因,为什么(=)null)需要一个可为等式的参数。(=)操作符在“a:equality时有类型'a->'a->bool。因此,运算符的任何使用都将限制其参数的类型以支持相等。虽然这在技术上确实是一个不必要的限制
null
(并且仅与null
)进行比较,这将导致编译器将该类型约束为可空(这是正常的)和可相等
为什么是后者?对于可为null但不支持相等的类型,似乎仅与null
进行比较就可以了
我知道我可以使用取消选中。equals
来获得可为null的约束,只是想知道我是否缺少一些明显的原因,为什么(=)null)
需要一个可为等式的参数。(=)
操作符在“a:equality时有类型'a->'a->bool。因此,运算符的任何使用都将限制其参数的类型以支持相等。虽然这在技术上确实是一个不必要的限制,当您与空文本进行比较时,我认为编译器只是使用其正常的推理过程,而不是将其视为特例是合理的
请注意,如果添加的约束令人反感,则始终可以使用obj.ReferenceEquals(x,null)