想象一下,我有以下内容:
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() 扩展方法,该方法当然会枚举结果。勾选答案的行为对于回答的实际问题是完全正确的。
很抱歉有任何混淆。