我理解断言的价值
[<StructuralEquality;StructuralComparison>]
这种静态强制相等和比较约束在结构上得出,如果它不能
则有一个很好的副作用来警告类似地[<ReferenceEquality>]
强制使用引用来满足相等约束。
最后NoComparison, NoEquality
静态地不满足这些约束条件,同时也可以捕获错误。
但我不确定CustomEquality, CustomComparison
的附加值是什么。
静态声明你会做一些自定义的东西有什么附加价值?
答案 0 :(得分:2)
[<CustomEquality>]
和[<CustomComparison>]
,并且需要为其定义一些非引用,非结构相等。 F#编译器通常会自动为这些类型生成相等和比较函数,因此这些属性告诉编译器不要生成这些函数,而是使用自定义方法。
如果您有一个表示数据库行的记录类型,并且(无论出于何种原因)您希望将类型的两个实例定义为相等(如果它们具有相同的主键值)(例如, CustomerId
) - 即使它们包含的其他数据不同。