2017-04-13 1 views
0

In Equality and Comparison Constraints in F#, hieß es, dass:Wie Vergleich in .NET zu tun?

Hinweis dort als „Referenzvergleich“ (die Objektzeiger, die von .NET Bewegung um, so würde die Reihenfolge ändern) nicht so etwas ist. Sie können dies mithilfe eines eindeutigen Tags und eines benutzerdefinierten Vergleichs implementieren.

Wie kann ich ein eindeutiges Tag zum Vergleich in F # und C# verwenden?

+1

F # hat keinen Zugriff auf Object.ReferenceEquals? C# tut es tatsächlich. https: // msdn .microsoft.com/de-de/gmb/library/dd183759.aspx – AndyJ

+1

Ich würde annehmen, "Unique-Tag und benutzerdefinierte Vergleich" bedeutet "Hinzufügen einer Eigenschaft zum Objekt und Reihenfolge von diesem". – AndyJ

+0

Der Artikel erwähnt, dass der Standardwert für fast alle .NET-Objekttypen die Referenzgleichheit ist. F # 's' Vergleich 'wird nicht sofort für alle .NET-Objekttypen unterstützt. – Romoku

Antwort

2

Wie Referenzvergleich in .NET zu tun? Wie kann ich ein eindeutiges Tag zum Vergleich in F # und C# verwenden?

Beachten Sie, dass in diesem Zusammenhang das Wort "Vergleich" im Unterschied zu "Gleichheit" verwendet wird. Es beschreibt eine Bestellung im Gegensatz zu nur Identität (die ist unterstützt). Und genau wie der Artikel sagt, wenn Sie eine Bestellung möchten, müssen Sie es selbst auferlegen. Der Compiler kann weder einen für Sie ableiten, noch kann es einen Standard "Referenzvergleich" geben, da es eine Standard "Referenzgleichheit" gibt.

Sie können das StructuralComparison Attribut anwenden, um zu verlangen, dass ein Typ tatsächlich einen Vergleich implementiert (ähnlich wie : comparison generische Einschränkung), der das Ausführen von Bestellvorgängen ermöglicht. Dadurch erhalten Sie eine Kompilierungsgarantie vom Compiler, dass Ihr Typ die Anforderung erfüllt, dass der abgeleitete Typ einen Vergleich implementiert.

Also, wie machen Sie "Referenzvergleich"? Du nicht! Es würde keinen Sinn ergeben, so wie es in dem Artikel steht. Sie müssen einen Typ verwenden, für den bereits ein Vergleich implementiert wurde, oder z. Implementieren Sie IComparable<T> für Ihren Typ, so dass es die comparison Einschränkung erfüllt.

Wenn Sie mehr Hilfe benötigen, müssen Sie genauer sein. Stellen Sie eine Frage, die eine gute Minimal, Complete, and Verifiable code example zeigt, was spezifischen Schwierigkeit, die Sie laufen, versuchen, den Rat in dem Artikel auf Ihren eigenen Code, mit einer genauen Erklärung dessen, was Sie versucht haben, und was Sie noch sind Schwierigkeiten haben, zur Arbeit zu kommen.

Verwandte Themen