私が次のものを持っていると想像してください:
private IEnumerable MyFunc(parameter a)
{
using(MyDataContext dc = new MyDataContext)
{
return dc.tablename.Select(row => row.parameter == a);
}
}
private void UsingFunc()
{
var result = MyFunc(new a());
foreach(var row in result)
{
//Do something
}
}
ドキュメントによると、linqの実行は、foreachの行で発生する結果を実際に列挙するまで延期されます。ただし、usingステートメントは、MyFunct()の呼び出しの最後にオブジェクトを確実に収集するように強制する必要があります。
ディスポーザが実行されたり、結果が実行されたりするのはいつですか?
私が考えることができるのは、遅延実行がコンパイル時に計算されることだけです。したがって、実際の呼び出しはコンパイラによってforeachの最初の行に移動され、usingが正しく実行されますが、foreach行まで実行されませんか?助けることができる教祖はそこにいますか?
編集:注:このコードは機能しますが、方法がわかりません。
少し読んだところ、コードでToList()拡張メソッドを呼び出したことに気づきました。これはもちろん結果を列挙します。チェックされた回答の動作は、実際に回答された質問に対して完全に正しいものです。
ご迷惑をおかけして申し訳ありません。