首页 > 解决方案 > 调用函数列表。如何获取它们的返回值并使用可能是已处置闭包的一部分的参数?

问题描述

我想调用一个函数列表。所有函数都返回一个布尔值。根据布尔值,我想打破循环调用函数列表中的每个函数。

这些函数需要一个参数,它是一个实体框架 DbContext,在“使用块”中实例化。有一个警告“访问已处置的关闭”

using (var context = new DbContext())
{
   var fileDeletionProcedure = new List<Action>
   {
       () => _proc.deleteUsers(Id, context),
       () => _proc.deleteAccounts(Id, context),
       () => _proc.deleteMoney(Id, context)
   }
   foreach (var f in fileDeletionProcedure)
   {
       var exit = f.Invoke();
       if (exit)
       {
           break;
       }
   }
}

我想做类似我提供的代码的事情,但Invoke()返回无效,有人有建议吗?另外,我将如何处理有关已处置关闭的警告?

提前致谢。

标签: c#

解决方案


这只是一个警告,提醒您您可能做错了事情,显然这些操作将在上下文中执行并且不会被处理。

如果这是一个更清晰的警告,您可以使用评论禁用它

另请注意,操作不会返回结果,您需要使用Func<bool>

// ReSharper disable AccessToDisposedClosure
var fileDeletionProcedure = new List<Func<bool>>
                            {
                               () => Something(db)
                            };
// ReSharper restore AccessToDisposedClosure


foreach (var f in fileDeletionProcedure)
{
   if (f.Invoke())
      break;
}

推荐阅读