Kur*_*out 5 f# type-constraints
如果将泛型类型与null(并且仅与null)进行比较,则会导致编译器将类型约束为nullable(可以)和equable.
为什么是后者?似乎只是比较null可以为可以为空的类型,但不支持相等.
我知道我可以Unchecked.equals用来获得可以为空的约束,只是想知道我是否缺少一些明显的理由为什么((=) null)需要一个等同的参数.
kvb*_*kvb 10
该(=)经营者具有类型'a -> 'a -> bool when 'a : equality.因此,运算符的任何使用都将限制其参数的类型以支持相等性.虽然从技术上来说,当你与null文字进行比较时,这在技术上是一个不必要的限制,但我认为编译器只使用其正常的推理过程而不是将其视为一种特殊情况是合理的.
请注意,obj.ReferenceEquals(x, null)如果添加的约束令人反感,您可以随时使用.