Хорошо, так что это сводит меня с ума. как этот код может не работать?Словарь не находит ключи, которые вводятся при использовании 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)]
Фрагмент умирает при попытке извлечь из словаря и не вызывает ни один из предоставленных методов. Я сейчас просто сумасшедший или здесь что-то не так?
человек, которого вы правы. Я уже два часа стуча головой о стену, много. cant belive, я не видел этого – LDomagala
Также обратите внимание, что ваш член GetHashCode на самом деле определяется как свойство, которое возвращает возвратную функцию. Если бы это был метод (определяемый как «p.GetHashCode()» и опуская часть «fun() ->» ниже), вы действительно получите предупреждение о том, что вы скрываете базовую реализацию, а не переопределяете ее. – kvb