В некоторых случаях полезно, чтобы IEnumerator<T>
наследовал от IDisposable
.
Например, возьмите File.ReadLines()
, который должен оставаться открытым FileStream
, который является неуправляемым ресурсом.
Или, если вы думаете об итераторе, использующем yield syntax
, вам нужно IDisposable
, чтобы пункты finally работали правильно:
IEnumerator<int> MyIt()
{
try
{
yield return 1;
}
finally
{
//Do Something
}
}
Обычно вы реализуете Current
следующим образом:
T Current//Implicit interface implementation
{
get
{
return something;
}
}
object IEnumerator.Current{get{return Current;}}
Ваш исходный код не работает, так как вы пытаетесь получить статическое свойство на самом интерфейсе.Вы, вероятно, хотели ((IEnumerator<T>)this).Current
.Но если вы имплицируете T Current{...}
неявно, то вам вообще не нужно это приведение.