Мы работаем над адаптацией некоторого стороннего кода путем расширения базового класса на производный класс, который мы можем настроить. Все работает отлично от одного метода, который возвращает IEnumerable.переопределить IEnumerable .NET
Мы создали код sudo для проверки того, где проблема, и его можно воссоздать с помощью простого примера.
В примере ниже код кода внутри метода никогда не вызывается; мы поставили там точки останова, мы добавили исключение, которое нужно немедленно выбросить. Результат всегда один и тот же, отладчик просто пропускает строку.
Может кто-нибудь объяснить, что мы делаем неправильно? Возможно ли, что сторонний код просто не работает?
public class Test
{
public virtual IEnumerable GetList(Type type, string key)
{
throw new NotImplementedException();
}
}
public class Test2 : Test
{
public override IEnumerable GetList(Type type, string key)
{
for (var x = 0; x <= 5; x++)
{
yield return x;
}
}
}
static void Main(string[] args)
{
var x = new Test2();
var y = x.GetList(typeof(decimal), "test") as List<int>;
}
EDIT: много хороших ответов, вкратце вопрос был ключевым словом yield. Поскольку это реализация сторонних разработчиков, я могу изменить код только в виртуальном методе. В конце концов, я закончил тем, что возвращал из него IEnumerable, а не возвращал из цикла.
Это заставило код работать в сторонней библиотеке.
Поскольку это метод итератора, ваш код в методе фактически не вводится до начала перечисления, например. с 'foreach'. –