Оператор yield return внутри блока using () {} Удаляет перед выполнением

Я написал свой собственный слой данных для сохранения в определенном файле и абстрагировал его с помощью пользовательского шаблона DataContext.

Все это основано на .NET 2.0 Framework (с учетом ограничений для целевого сервера), поэтому, хотя некоторые из них могут выглядеть как LINQ-to-SQL, это не так! Я только что реализовал подобный шаблон данных.

См. Пример ниже для примера ситуации, которую я пока не могу объяснить.

Чтобы получить все экземпляры Animal - я делаю это, и он отлично работает

public static IEnumerable<Animal> GetAllAnimals() {
        AnimalDataContext dataContext = new AnimalDataContext();
            return dataContext.GetAllAnimals();
}

И реализация метода GetAllAnimals () в AnimalDataContext () ниже

public IEnumerable<Animal> GetAllAnimals() {
        foreach (var animalName in AnimalXmlReader.GetNames())
        {
            yield return GetAnimal(animalName);
        }
}

AnimalDataContext () реализует IDisposable, потому что у меня там есть XmlTextReader, и я хочу убедиться, что он быстро очищается.

Теперь, если я оберну первый вызов внутри оператора using, как это

public static IEnumerable<Animal> GetAllAnimals() {
        using(AnimalDataContext dataContext = new AnimalDataContext()) {
            return dataContext.GetAllAnimals();
        }
}

и поставить точку останова в первой строке метода AnimalDataContext.GetAllAnimals () и другую точку останова в первой строке метода AnimalDataContext.Dispose () и выполнить ...

метод Dispose () называется FIRST, так что AnimalXmlReader.GetNames () выдает исключение «ссылка на объект не установлена на экземпляр объекта», потому что AnimalXmlReader был установлен в null в Dispose () ???

Есть идеи? У меня есть догадка, что это связано сдоходность не разрешается вызываться внутри блока try-catch, которыйс помощью эффективно представляет, после компиляции ...

Ответы на вопрос(2)

Ваш ответ на вопрос