En ce qui concerne le commentaire sur mon autre réponse, vous pourriez tenir compte dans une base réutilisable classe, mais je ne suis pas sûr que ce soit vraiment une bonne idée:
type EqCompBase<'EqKey,
'DerivedType when 'DerivedType :> EqCompBase<'EqKey,'DerivedType> >
(id : 'EqKey) =
member this.ID = id
override this.Equals(o) =
match o with
| :? EqCompBase<'EqKey, 'DerivedType> as sc -> this.ID = sc.ID
| _ -> false
override this.GetHashCode() =
id.GetHashCode()
interface System.IComparable with
member this.CompareTo(o) =
match o with
| :? EqCompBase<'EqKey, 'DerivedType> as sc -> compare this.ID sc.ID
| _ -> -1
type SomeClass(id : int, otherFieldThatDoesNotMatterForEquality : string) =
inherit EqCompBase<int, SomeClass>(id)
let someSet = Set.of_list [SomeClass(1,"yadda"); SomeClass(2,"blah")]
let test = someSet.Contains(SomeClass(2,"foo"))
printfn "%A" test // true
Un grand merci, y a-t-il quelque chose dans le bloc d'alimentation F # qui implémente le motif d'enregistrement actif? Serait cool si je pouvais juste en hériter. Hmm, peut-être que je vais ajouter plus à cette classe et l'utiliser comme tel. – bhd739ge
Voir mon autre réponse. – Brian
Avez-vous pensé à utiliser un dictionnaire au lieu d'un ensemble? – gradbot