特定のファイルに永続化する独自のカスタム データ レイヤーを作成し、それをカスタム 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 ブロック内で呼び出すことが許可されていないことに関連しているという予感があります。これusing
は、コンパイルされると効果的に表されます...