.net – 有没有办法影响F#编译器为结构相等生成的代码?

这是一个具体的例子.

我有一个带浮点字段的记录类型,我希望能够比较这种类型的实例是否相等,但当然结构相等和比较的默认编译器生成的实现不能解释浮点不精确,所以你可以在你的比较中得到误报和否定.

在我的应用程序中,我有很多记录,每个记录都包含许多浮点字段.
如果我可以在我的浮点字段或整个记录上打一个“精确数字”属性,告诉编译器使用那么多精度数字比较浮点值是否相等,那会更好.
我可以覆盖Equals,GetHashCode和IComparable.CompareTo,但这是很多的打字和沉重的维护负担.

我想另一种选择是代码生成器工具,为我吐出所有这些覆盖.

最佳答案 检查了F#源代码,据我所知,这是不受支持的.

如果你想对它进行刺杀,那么魔术就会发生在这里:

https://github.com/Microsoft/visualfsharp/blob/fsharp4/src/fsharp/augment.fs

点赞