在Linq语句lambda中处理资源

本文关键字:处理 资源 lambda Linq 语句 | 更新日期: 2023-09-27 18:11:49

我有一些代码: <>之前使用(var userlookup = new userlookup ()){someThing = someecollection.Select (t =>{var user = userLookup.UserLookup(t.r userid);返回新包装器{UserString =字符串。Format("{0} {1} ({2})",用户。FirstName、用户。姓,t.UserId),SomeOtherProperty = t.SomeFunction()等。};});}之前

当访问someThing时,我得到一个ObjectDisposedException。这可以通过移除using块来解决。如果我这样做:

  1. 当Linq枚举被处理时,UserLookup会被处理吗?
  2. 如果是这样,这是怎么发生的?
  3. 是否有任何方法来重新结构这段代码,以处置UserLookup实例时,可枚举的处置,同时仍然保持延迟执行?

(我确信我可以在using块内调用ToList(),它会工作得很好,我可能会这样做,但只是为了好奇)

我还应该提到someThing是MVC视图模型上的一个属性

在Linq语句lambda中处理资源

是否有任何方法来重新结构这段代码,以处置UserLookup实例时,可枚举对象被处置,同时仍然保持延迟执行?

您需要将您的UserLookup实例传递给生成此序列的方法,并在处理完结果后处理它。

(我确信我可以在using块内调用ToList(),它会工作得很好,我可能会这样做,但只是为了好奇)

是的,这将导致在UserLookup被处置之前完全执行enumerable,并避免这个问题。