2017-04-13 76 views
0

Equality and Comparison Constraints in F#,它说:如何在.NET中做参考比较?

注有“参考比较”没有这样的事(约使用.NET对象移动指针,所以订货会改变)。您可以通过使用唯一标签和自定义比较来实现这一点。

如何在F#和C#中使用唯一标签进行比较?

+1

F#无法访问Object.ReferenceEquals? C#cirtainly做。 https:// msdn .microsoft.com/en-gb/library/dd183759.aspx – AndyJ

+1

我假设“唯一标记和自定义比较”意思是“通过该属性添加属性并排序”。 – AndyJ

+0

该文章提到,由于几乎所有.NET对象类型的默认值都是引用相等,所以.NET对象类型不支持F#的“比较”概念。 – Romoku

回答

2

如何在.NET中做参考比较?如何在F#和C#中使用唯一标签进行比较?

请注意,在这种情况下,“比较”一词被用于区别于“平等”。它描述了一个订购而不仅仅是标识(支持)。正如引用的文章所说,如果你想要订购,你必须自己强加它。编译器无法为您推导出一个,也不存在默认的“参考比较”,因为存在默认的“参考相等”。

您可以应用StructuralComparison属性来要求某个类型实际上执行比较(类似于: comparison通用约束),该类型允许执行排序操作。这为编译器提供了编译时确保您的类型符合推断类型实现比较的要求。

那么,你如何做“参考比较”?你不要!正如文章所说,这是没有意义的。您需要使用已实施比较的类型,或为您的类型实施IComparable<T>,以便它符合comparison约束条件。

如果您需要更多帮助,则需要更具体。发布一个包含良好Minimal, Complete, and Verifiable code example的问题,显示具体的难度,试图将参考文章中的建议应用到您自己的代码中,并精确地解释您尝试过的内容,以及您还在做什么难以开始工作。