У меня есть два класса, GenericList
и SpecificList
, где SpecificList
наследуется от GenericList
.GenericList
реализует IEnumerable<GenericItem>
и SpecificList
реализует IEnumerable<SpecificItem>
.SpecificItem
наследуется от GenericItem
.Я должен реализовать GetEnumerator
в GenericList
и SpecificList
, так как они реализуют IEnumerable<T>
.В GenericList
это достаточно просто, я просто возвращаю перечислитель для базового List<T>
:
public IEnumerator<GenericItem> GetEnumerator()
{
return genericItemsList.GetEnumerator();
}
Однако в SpecificList
это кажется сложнее.Кажется рискованным бросать IEnumerator<GenericItem>
на IEnumerator<SpecificItem>
, и я не знаю, сработает ли это вообще.Вместо этого я сделал следующее:
public new IEnumerator<SpecificItem> GetEnumerator()
{
IEnumerator<GenericItem> enumerator = base.GetEnumerator();
while (enumerator.MoveNext())
{
yield return (SpecificItem)enumerator.Current;
}
}
Это прекрасно компилируется, и простой модульный тест MSTest, вызывающий SpecificList.GetEnumerator()
, похоже, показывает, что он работает.Однако ReSharper выделяет base
в вышеупомянутом методе со следующим предупреждением:
Доступ к GenericList.GetEnumerator через ключевое слово «base» из анонимного метода, лямбда-выражения, запроса или итератора приводит к непроверяемому коду
Это то, о чем мне следует беспокоиться?Должен ли я сделать что-то по-другому?
Редактировать: Я использую ReSharper 5.1 Full Edition Pre-Release Build 5.1.1715.35.
Кроме того, я должен отдохнуть отвыполнение модульных тестов MSTest: я просто нажал Ctrl + R , Ctrl + T в Chrome, чтобы перезагрузить страницу ...