Die folgende Typenerweiterung
module Dict =
open System.Collections.Generic
type Dictionary<'K, 'V> with
member this.Difference(that:Dictionary<'K, 'T>) =
let dict = Dictionary()
for KeyValue(k, v) in this do
if not (that.ContainsKey(k)) then
dict.Add(k, v)
dict
gibt den Fehler:
Die Signatur und die Implementierung sind nicht kompatibel, weil die Deklaration des Typparameters "TKey" eine Einschränkung der Form "TKey : equality" erfordert.
Aber wenn ich die Einschränkung hinzufüge, wird der Fehler angezeigt:
Die deklarierten Typparameter für diese Typerweiterung stimmen nicht mit den deklarierten Typparametern des ursprünglichen Typs 'Dictionary< überein. , >'
Dies ist besonders rätselhaft, weil die folgende Typenerweiterung diese Einschränkung nicht hat und funktioniert.
type Dictionary<'K, 'V> with
member this.TryGet(key) =
match this.TryGetValue(key) with
| true, v -> Some v
| _ -> None
Jetzt habe ich seltsame Gedanken: Ist die Einschränkung nur erforderlich, wenn auf bestimmte Mitglieder zugegriffen wird?