c# - 如何在 Linq 表达式中处理 IDisposableobject create?

标签 c# .net linq

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 这样做有合理的理由)

SelectMany

或使用 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;

Using

关于c# - 如何在 Linq 表达式中处理 IDisposableobject create?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751153/

相关文章:

c# - 指定的包含路径无效。 EntityType 'SpiceShop.Models.Product' 未声明名称为 'Products' 的导航属性

c# - linq where call 是否减少了对我的数据库的调用(自定义构建)

c# - 如果第二个或第三个表为空,LINQ Join 不返回结果

c# - 使用 Visual Studio Webserver 托管 WCF SOAP 端点时遇到问题

.net - WSE 3.0 - 字节数组被编码为 Base64 而不是 "MTOM-ing"到二进制

c# - 在 .NET 4.0 (C#) 中动态实现接口(interface)

C# LINQ 使用 DISTINCT 计算元素

c# - 实现接口(interface)如何为我们提供强类型 API?

c# - 强命名程序集在我的 Visual C# 中不起作用

c# - 推荐一个服务器端媒体编码器或 SDK