我有一些代码:
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
会被处理吗?UserLookup
实例,同时仍然保持延迟执行? (我确定我可以在使用区域内调用ToList()并且它可以正常工作,我可能会这样做,但仅仅是为了好奇心)
我还应该提到someThing
是MVC视图模型的属性。
答案 0 :(得分:1)
有没有办法重新构造此代码,以便在仍然保持延迟执行的同时处置枚举时处置UserLookup实例?
您需要将UserLookup
实例传递给生成此序列的方法,并在完成处理结果后将其丢弃。
(我确定我可以在使用区域内调用ToList()并且它可以正常工作,我可能会这样做,但仅仅是为了好奇心)
是的,这会导致在放置UserLookup
之前完全执行可枚举,并避免问题。