我编写了自己的自定义数据层以持久保存到特定文件,并使用自定义 DataContext 模式对其进行了抽象。
这一切都基于 .NET 2.0 框架(给定目标服务器的约束),因此即使其中一些可能看起来像 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 块内被调用有关,该块using
有效地表示,一旦编译......