2013-03-01 5 views
-1

Как сбросить экземпляр IEnumerator в нижнем регистре? (E.Reset() бросает NotImplementedException)Как сбросить экземпляр IEnumerator в нижнем регистре

void Main() 
    { 
     IEnumerator<string> e = new List<string> { "a", "b", "c" }.Select(o => o).GetEnumerator(); 

     while(e.MoveNext()) 
     { 
      Console.WriteLine(e.Current); 
     } 

     if( 
      //some condition 
     ) 
     { 
      e.Reset(); 

      while(e.MoveNext()) 
      { 
       //Do something else with e.Current 
      } 
     } 

    } 
+3

также: [Почему метод Reset() на классе Enumerator должен бросить NotSupportedException()?] (Http://stackoverflow.com/questions/1468170/why-the-reset-method-on-enumerator- класс обязательно бросьте-A-NotSupportedException) – sloth

ответ

2

Поскольку 'реализация' метода будет выглядеть что-то вроде этого:

public void Reset() { 
    throw new NotImplementedException(); 
} 

Для справки: from MSDN

В Метод сброса предоставляется для совместимости COM. Не обязательно ; вместо этого разработчик может просто выбросить исключение NotSupportedException.

Если в данном случае используемый тип исключения является отклонением этой рекомендации.

0

Глядя на documentation Объяснение заключается в следующем:

Метод Reset предназначен для COM-взаимодействия. Не обязательно ; вместо этого разработчик может просто выбросить исключение NotSupportedException.

и

Примечания к Все вызовы реализующих Сброс должен привести в том же состоянии для счетчику. Предпочтительной реализацией является перемещение нумератора до начала сбора до первого элемента . Это делает недействительным перечислитель, если коллекция была изменена с с момента создания счетчика, что соответствует MoveNext и Current.

Смежные вопросы