我已经编写了自己的自定义数据层以保存到特定文件,并且我使用自定义的DataContext模式对其进行了抽象。在using(){}块中产生return语句在执行之前进行处理
这都是基于.NET 2.0框架(给定了目标服务器的限制),所以即使其中一些看起来像LINQ-to-SQL,它不是!我刚刚实现了一个类似的数据模式。
请参阅下面的示例,了解我无法解释的情况的示例。
为了得到动物的所有实例 - 我做到这一点,它下面
public IEnumerable<Animal> GetAllAnimals() {
foreach (var animalName in AnimalXmlReader.GetNames())
{
yield return GetAnimal(animalName);
}
}
的AnimalDataContext工作正常
public static IEnumerable<Animal> GetAllAnimals() {
AnimalDataContext dataContext = new AnimalDataContext();
return dataContext.GetAllAnimals();
}
而且GetAllAnimals的实现()方法在AnimalDataContext()( )实现了IDisposable,因为我在那里有一个XmlTextReader,我想确保它快速清理。现在
,如果我换第一次调用using语句里面,像这样
public static IEnumerable<Animal> GetAllAnimals() {
using(AnimalDataContext dataContext = new AnimalDataContext()) {
return dataContext.GetAllAnimals();
}
}
,并在AnimalDataContext.GetAllAnimals的第一行把一个断点()方法和另一个突破点在第一线在AnimalDataContext.Dispose()方法,并执行...
的Dispose()方法首先被调用,这样AnimalXmlReader.GetNames()给出了“对象引用未设置为对象的实例”异常,因为AnimalXmlReader有已在Dispose()中设置为null ???
有什么建议吗?我有一种预感,它关系到收益率回报没有被允许一个try-catch块内被调用,这使用有效地表示,一旦编译...
这基本上是我遇到的问题之一,看到我的问题在这里:http://stackoverflow.com/questions/1524367 – 2009-10-08 16:55:19