在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块来解决。如果我这样做:
- 当Linq枚举被处理时,
UserLookup
会被处理吗? - 如果是这样,这是怎么发生的?
- 是否有任何方法来重新结构这段代码,以处置
UserLookup
实例时,可枚举的处置,同时仍然保持延迟执行?
(我确信我可以在using块内调用ToList(),它会工作得很好,我可能会这样做,但只是为了好奇)
我还应该提到someThing
是MVC视图模型上的一个属性
是否有任何方法来重新结构这段代码,以处置UserLookup实例时,可枚举对象被处置,同时仍然保持延迟执行?
您需要将您的UserLookup
实例传递给生成此序列的方法,并在处理完结果后处理它。
(我确信我可以在using块内调用ToList(),它会工作得很好,我可能会这样做,但只是为了好奇)
是的,这将导致在UserLookup
被处置之前完全执行enumerable,并避免这个问题。