1
我有一些代码:处置资源的lambda
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.. }; }); }
当someThing
访问我得到一个ObjectDisposedException
。这可以通过删除使用块来解决。如果我这样做:
- 将
UserLookup
配置Linq枚举时? - 如果是这样如何发生?
- 有没有什么办法重新构造这段代码来处置
UserLookup
实例,当枚举被抛弃时仍然保持延期执行?
(我敢肯定,我可以调用ToList()的使用块中,它会很好地工作,我可能会做,但只是好奇的缘故)
我还要提到的是someThing
是MVC视图模型上的属性。
所以为了保持defferred执行,我必须将foreach包装在using块中,并将该属性转换为一个将UserLookup作为参数的方法。说得通。谢谢! – Iain 2013-05-02 23:44:46