Я написал свой собственный слой данных для сохранения в определенном файле и абстрагировал его с помощью пользовательского шаблона 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, который с использованием эффективно представляет после компиляции ...