Я написал свой собственный пользовательский слой данных, чтобы сохранить его в определенном файле, и я отрисовал его с помощью шаблона 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()???
Любые идеи? У меня есть догадка, что его связанный с yield return не может быть вызван внутри блока try-catch, который с помощью эффективно представляет, после компиляции...