Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么空检查会导致F#中的相等约束?_F#_Type Constraints - Fatal编程技术网

为什么空检查会导致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)