sind Ok, so dass dies mich verrückt macht. Wie kann dieser Code möglicherweise nicht funktionieren?Wörterbuch nicht finden Schlüssel, die bei der Verwendung von F #
open System.Collections.Generic
type testing (a:int)=
let test = [Empty]
member p.GetHashCode =
fun() -> printfn "called hash";0
override p.Equals(other:obj) =
printfn "called equals"
true
interface IEquatable<testing> with
override p.Equals(other:testing) =
true
static member op_Equality (other:obj) = printfn "called op" ;true
let dict2 = new Dictionary<testing,int>()
dict2.[(testing 50)] <- 50
dict2.[(testing 50)]
Das Snippet stirbt beim Versuch, aus dem Wörterbuch zu holen, und ruft keine der bereitgestellten Methoden auf. Bin ich heute einfach verrückt oder stimmt hier etwas nicht?
mann du bist sooo richtig. Ich habe jetzt schon seit zwei Stunden meinen Kopf gegen die Wand geschlagen, sehr viel. kann nicht glauben, dass ich das nicht gesehen habe – LDomagala
Beachten Sie auch, dass Ihr GetHashCode-Mitglied tatsächlich als eine Eigenschaft definiert ist, die eine Nullfunktion zurückgibt. Wenn es stattdessen eine Methode wäre (definiert als 'p.GetHashCode()' und den 'fun() ->' Teil unten weglässt), erhalten Sie tatsächlich eine Warnung, dass Sie die Basisimplementierung verstecken, anstatt sie zu überschreiben. – kvb