C# 在Linq语句lambdas中处理资源
我有一些代码: using(var userlookup = new UserLookup()) { someThing = someCollection .Select(t => { var user = userLookup.UserLookup(t.UserId); return new Wrapper { UserString = string.Format("{0} {1} ({2})", user.FirstName, user.LastName, t.UserId), SomeOtherProperty = t.SomeFunction() etc.. }; }); } 使用(var userlookup=newuserlookup()) { 某物=某物集合 .选择(t=> { var user=userLookup.userLookup(t.UserId); 返回新包装器 { UserString=string.Format(“{0}{1}({2})”, user.FirstName、user.LastName、t.UserId), SomeOtherProperty=t.SomeFunction() 等 }; }); } 当访问C# 在Linq语句lambdas中处理资源,c#,linq,lambda,idisposable,C#,Linq,Lambda,Idisposable,我有一些代码: using(var userlookup = new UserLookup()) { someThing = someCollection .Select(t => { var user = userLookup.UserLookup(t.UserId); return new Wrapper
某物时,我会得到一个ObjectDisposedException
。这可以通过删除using块来解决。如果我这样做:
当Linq可枚举文件被释放时,UserLookup
会被释放吗
如果是这样,这是怎么发生的
当处理可枚举项时,是否有任何方法可以重新构造此代码以处理UserLookup
实例,同时仍保留延迟执行李>
(我确信我可以在using块内调用ToList(),它会工作得很好,我可能会这样做,但只是出于好奇)
我还应该提到,someThing
是MVC视图模型的一个属性
在处理可枚举项时,是否有任何方法可以重新构造此代码以处理UserLookup实例,同时仍保持延迟执行
您需要将UserLookup
实例传递给生成此序列的方法,并在处理完结果后处理它
(我确信我可以在using块内调用ToList(),它会工作得很好,我可能会这样做,但只是出于好奇)
是的,这将导致在处置UserLookup
之前完全执行可枚举项,从而避免该问题
在处理可枚举项时,是否有任何方法可以重新构造此代码以处理UserLookup实例,同时仍保持延迟执行
您需要将UserLookup
实例传递给生成此序列的方法,并在处理完结果后处理它
(我确信我可以在using块内调用ToList(),它会工作得很好,我可能会这样做,但只是出于好奇)
是的,这将导致在处置UserLookup
之前完全执行可枚举项,并避免该问题。因此,为了保持定义的执行,我必须有效地将foreach包装在using块中,并将属性转换为以UserLookup为参数的方法。有道理。谢谢因此,为了保持deferred执行,我必须有效地将foreach包装在using块中,并将属性转换为以UserLookup作为参数的方法。有道理。谢谢