Предположим, что у меня есть класс TestCollection, который используется для хранения объектов типа испытания и определяется какДобавление IEnumerable <T> в класс, производный от CollectionBase
public class TestCollection : CollectionBase
Это позволяет мне перебирать коллекции либо как
foreach(object o in collection)
...
или
foreach(Test t in collection)
, но не позволяет мне нужно использовать новые запросы Linq.
Если изменить определение класса к
public class TestCollection : CollectionBase, IEnumerable<Test>
и добавить метод
public new IEnumerator<Test> GetEnumerator()
{
foreach (Test o in this.List)
yield return o ;
}
затем Linq запросы доступны.
Однако этот новый метод не только призывает к Linq запросов, но также называется в унаследованном коде (т.е. во время Еогеаспа (объект O в коллекции) и Еогеасп (Test в коллекции).
Есть ли разница между старым способом итерации через коллекцию и этим новым способом, предполагая, что все элементы в коллекции имеют тип Test? Я знаю, что добавление метода IEnumerator приведет к тому, что программа выкинет исключение, если найдет какие-либо другие типы, кроме Test , но хочу знать, не упустил ли я что-либо.
Нет; он * реализует * это - как бросание «NotImplementedException». Для этой цели подходят блоки итераторов. –
Вот что я имел в виду. – SLaks