Ошибки расширения типа для Dictionary <'K,' V>

Следующее расширение типа

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

дает ошибку:

Подпись и реализация несовместимы, потому что объявление параметра типа 'TKey' требует ограничения формы 'TKey: Equity

Но когда я добавляю ограничение, оно дает ошибку:

Объявленные параметры типа для этого расширения типа не соответствуют объявленному типу параметры исходного типа 'Dictionary <, >'

Это особенно загадочно, потому что следующее расширение типа не имеет ограничений и работает.

type Dictionary<'K, 'V> with
  member this.TryGet(key) =
    match this.TryGetValue(key) with
    | true, v -> Some v
    | _ -> None

Теперь у меня странные мысли: is ограничение требуется только при доступе к определенным членам?

7
задан Guy Coder 10 May 2016 в 11:07
поделиться