2017-04-13 29 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的問題,顯示具體的難度,試圖將參考文章中的建議應用到您自己的代碼中,並精確地解釋您嘗試過的內容,以及您還在做什麼難以開始工作。