Linq 允许您在查询表达式中创建新对象。当您有封装列表生成的类时,这很有用。我想知道您如何处理创建的需要它的对象?
例子:
class Generator
{
public IEnumerable<int> Gen(int size)
{
return Enumerable.Range(0, size);
}
}
class bar
{
public void doit()
{
var foo =
from r in Enumerable.Range(1, 3)
from g in new Generator().Gen(r)
select g;
}
}
这将创建 3 个 Generator 对象,它们将在某个时候被垃圾回收。如果 Generator 是 IDisposable,我将如何获得 Dispose() 调用?
最佳答案
好的;我希望这是巧合,但是:SelectMany; combining IDisposable and LINQ ,这(使用自定义 SelectMany
实现)将允许:
var foo =
from r in Enumerable.Range(1, 3)
from gen in new Generator()
from g in gen.Gen(r)
select g;
(请注意,我假设根据r
这样做有合理的理由)
或使用 Using()
扩展方法(而不是 SelectMany
):
var foo =
from r in Enumerable.Range(1, 3)
from gen in new Generator().Using()
from g in gen.Gen(r)
select g;
关于c# - 如何在 Linq 表达式中处理 IDisposableobject create?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751153/