У меня есть два класса: GenericList
и SpecificList
, где SpecificList
наследуется от GenericList
. GenericList
орудия IEnumerable<GenericItem>
и SpecificList
орудия IEnumerable<SpecificItem>
. SpecificItem
наследуется от GenericItem
. Я должен реализовать GetEnumerator
как в GenericList
, так и в SpecificList
, так как они реализуют IEnumerable<T>
. В GenericList
, это достаточно легко, я просто вернуть перечислитель для базового List<T>
:Доступ к базовому классу C# в итераторе вызывает предупреждение ReSharper
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 через «базовое» ключевое слово из анонимного метода, лямбда-выражения, выражения запроса или результатов итераторов в непроверяемом коде
Это что-то, о чем я должен беспокоиться? Должен ли я что-то делать по-другому?
Редактировать: Я использую ReSharper 5.1 Full Edition Pre-Release Build 5.1.1715.35.
Кроме того, я должен сделать перерыв от работы модульных тестов MSTest: Я просто ударил Ctrl +R, Ctrl +T в Chrome, чтобы перезагрузить страницу ...
Спасибо. Возможно, тупой вопрос, но использует ли версия компилятора C#, которую я использую, в зависимости от версии.NET Я использую? Это проект .NET 3.5 - это гарантирует мне определенную версию компилятора C#? –
@Sarah, он больше привязан к версии Visual Studio, которую вы используете, чем таргетинг на структуру. 2008 = C# 3.0 и 2010 = C# 4.0 – JaredPar
aha! Я в 2008 SP1. Ваше предложение удаляет предупреждение ReSharper, и все, похоже, работает. :) –