Реализация IEnumerable<'T>, когда базовый класс реализует IEnumerable

Есть ли лаконичный способ реализовать IEnumerable<'T> в типе, базовый тип которого реализует негенеративный IEnumerable? Я использую для этого приведенную ниже функцию mkEnumerator, но это кажется чрезмерным.

open System
open System.Collections.Generic
open System.Configuration

let mkEnumerator<'T> (e : System.Collections.IEnumerator) =
  { new IEnumerator<'T> with
      member __.Current = e.Current |> unbox
    interface System.Collections.IEnumerator with
      member __.Current = e.Current
      member __.MoveNext() = e.MoveNext()
      member __.Reset() = e.Reset()
    interface IDisposable with
      member __.Dispose() =
        match e with
        | :? IDisposable as d -> d.Dispose()
        | _ -> () }

type MyConfigElement() = 
  inherit ConfigurationElement()

type MyConfigCollection() =
  inherit ConfigurationElementCollection()
  override __.CreateNewElement() = Unchecked.defaultof<_>
  override __.GetElementKey(_) = Unchecked.defaultof<_>
  interface IEnumerable<MyConfigElement> with
    member __.GetEnumerator() = mkEnumerator<MyConfigElement> (base.GetEnumerator())

Обновление

Следуя предложению Desco, я теперь использую:

type MyConfigCollection() =
  inherit ConfigurationElementCollection()
  ...
  interface IEnumerable<MyConfigElement> with
    member __.GetEnumerator() = (Seq.cast<MyConfigElement> this).GetEnumerator()
7
задан Daniel 9 December 2011 в 17:45
поделиться