有没有一种方法可以对动态创建的目标使用using语句?

rory.ap

假设我已经定义了一个类MyDisposable : IDisposable我知道我可以IDisposable为该using语句提供对象的硬编码列表

using (MyDisposable firstDisposable = new MyDisposable(),
    secondDisposable = new MyDisposable())
{
    // do something
}

现在让我们说我有一些方法可以对我的一次性对象的集合执行操作,并且我想在using语句中执行此操作可能看起来像这样(但这当然不起作用,因为using块需要一个或多个IDisposable对象,而我要传递一个集合对象):

using (var myDisposables = GetMyDisposables())
{
    foreach (var myDisposable in myDisposables)
    {
        DoSomething(myDisposable);
        DoSomethingElse(myDisposable);
    }
}

这里只是为了清楚起见,其他方法:

static List<MyDisposable> GetMyDisposables()
{
    throw new NotImplementedException(); // return a list of MyDisposable objects
}

static void DoSomething(MyDisposable withMyDisposable)
{
    // something
}

static void DoSomethingElse(MyDisposable withMyDisposable)
{
    // something else
}

我可以通过某种方式完成此操作using吗?还是我只需要扔掉声明并手动处置?

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

您可以采用的一种方法是收集IDisposable对象,这也是IDisposable

class CollectionOfDisposable<T> : IDisposable where T : IDisposable  {
    public IList<T> Members {get; private set;}
    public CollectionOfDisposable(IEnumerable<T> members) {
        Members = members.ToList();
    }
    public void Dispose() {
        var exceptions = new List<Exception>();
        foreach (var item in Members) {
            try {
                item.Dispose();
            } catch (Exception e) {
                exceptions.Add(e);
            }
        }
        if (exceptions.Count != 0) {
            throw new AggregateException(exceptions);
        }
    }
}

现在,您可以编写以下代码:

using (var myDisposables = GetMyDisposables()) {
    foreach (var myDisposable in myDisposables.Members) {
        DoSomething(myDisposable);
        DoSomethingElse(myDisposable);
    }
}

static CollectionOfDisposable<MyDisposable> GetMyDisposables() {
    throw new NotImplementedException(); // return a list of MyDisposable objects
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以使用Python的“ with”语句,例如C#的“ using”语句

来自分类Dev

有没有一种方法可以解决使用break语句的问题?

来自分类Dev

有没有一种方法可以在Python中使用if语句生成“ Not a number”?

来自分类Dev

有没有一种方法可以对类中的所有成员使用`std :: optional`

来自分类Dev

有没有一种方法可以对宏进行计数?

来自分类Dev

有没有一种方法可以对子数组的张量进行排序?

来自分类Dev

有没有一种方法可以对拆分的数组进行排序?

来自分类Dev

有没有一种方法可以对行的值求和?

来自分类Dev

有没有一种方法可以对Pascal中的多个按钮使用一个过程?

来自分类Dev

有没有一种方法可以对setter方法和class属性使用相同的名称?

来自分类Dev

有没有一种方法可以对Go项目中的导入使用可重用的路径?

来自分类Dev

使用`hconcat`时,有没有一种方法可以对齐图表标题?

来自分类Dev

有没有一种方法可以使用Python从目录创建jar?

来自分类Dev

有没有一种方法可以创建到不存在的目标的符号链接?

来自分类Dev

使用BFS,有没有一种方法可以找到所有顶点到目标顶点的距离?

来自分类Dev

有没有一种方法可以在目标描述中扩展ant属性?

来自分类Dev

有没有一种方法可以将屏幕上的按钮作为目标?

来自分类Dev

有没有一种方法可以从karma.conf.js创建和运行动态脚本

来自分类Dev

有没有一种方法可以在外部表中动态创建Columnfamily?

来自分类Dev

有没有一种方法可以在Ruby on Rails中使用HTML文件创建多边形目标区域?

来自分类Dev

有没有一种方法可以删除Haskell中重复的where语句?

来自分类Dev

PHP:有没有一种方法可以缩短此if / elseif / else语句?

来自分类Dev

有没有一种方法可以执行if语句为空值

来自分类Dev

Postgres:有没有一种方法可以在INSERT语句之后执行代码?

来自分类Dev

在bash中,有没有一种方法可以使我的语句简短(if或)?

来自分类Dev

有没有一种方法可以通过LINQ语句获得行数?

来自分类Dev

有没有一种方法可以在UPDATE查询中使用带有动态列名的PDO?

来自分类Dev

有没有一种方法可以在UPDATE查询中使用带有动态列名的PDO?

来自分类Dev

有没有一种方法可以在sql中的where子句中使用case语句使用or或=?

Related 相关文章

  1. 1

    有没有一种方法可以使用Python的“ with”语句,例如C#的“ using”语句

  2. 2

    有没有一种方法可以解决使用break语句的问题?

  3. 3

    有没有一种方法可以在Python中使用if语句生成“ Not a number”?

  4. 4

    有没有一种方法可以对类中的所有成员使用`std :: optional`

  5. 5

    有没有一种方法可以对宏进行计数?

  6. 6

    有没有一种方法可以对子数组的张量进行排序?

  7. 7

    有没有一种方法可以对拆分的数组进行排序?

  8. 8

    有没有一种方法可以对行的值求和?

  9. 9

    有没有一种方法可以对Pascal中的多个按钮使用一个过程?

  10. 10

    有没有一种方法可以对setter方法和class属性使用相同的名称?

  11. 11

    有没有一种方法可以对Go项目中的导入使用可重用的路径?

  12. 12

    使用`hconcat`时,有没有一种方法可以对齐图表标题?

  13. 13

    有没有一种方法可以使用Python从目录创建jar?

  14. 14

    有没有一种方法可以创建到不存在的目标的符号链接?

  15. 15

    使用BFS,有没有一种方法可以找到所有顶点到目标顶点的距离?

  16. 16

    有没有一种方法可以在目标描述中扩展ant属性?

  17. 17

    有没有一种方法可以将屏幕上的按钮作为目标?

  18. 18

    有没有一种方法可以从karma.conf.js创建和运行动态脚本

  19. 19

    有没有一种方法可以在外部表中动态创建Columnfamily?

  20. 20

    有没有一种方法可以在Ruby on Rails中使用HTML文件创建多边形目标区域?

  21. 21

    有没有一种方法可以删除Haskell中重复的where语句?

  22. 22

    PHP:有没有一种方法可以缩短此if / elseif / else语句?

  23. 23

    有没有一种方法可以执行if语句为空值

  24. 24

    Postgres:有没有一种方法可以在INSERT语句之后执行代码?

  25. 25

    在bash中,有没有一种方法可以使我的语句简短(if或)?

  26. 26

    有没有一种方法可以通过LINQ语句获得行数?

  27. 27

    有没有一种方法可以在UPDATE查询中使用带有动态列名的PDO?

  28. 28

    有没有一种方法可以在UPDATE查询中使用带有动态列名的PDO?

  29. 29

    有没有一种方法可以在sql中的where子句中使用case语句使用or或=?

热门标签

归档