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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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