我目前正在浏览一些读取Active Directory条目并对其进行操作的代码。由于我没有这种东西,我 F12 ' d(DirectoryEntry
,SearchResultCollection
,...),我发现他们都实现了IDisposable
界面,但我在代码中看不到任何using
块。
在这种情况下,那些甚至是必要的(即,我应该盲目地重构它们吗?)
我的另一个问题(代码中有很多实例化的IDisposable
个对象:Isn' t IDisposable
制作东西非常"丑陋"在这种情况下?我的意思是,我喜欢using
语句,因为它们基本上让我不再担心事情,但在很多情况下,代码的布局类似于以下内容:
using (var one = myObject.GetSomeDisposableObject())
using (var two = myObject.GetSomeOtherDisposableObject())
{
one.DoSomething();
using (var foo = new DisposableFoo())
{
MyMethod(foo);
using (...)
using (...)
{
...
}
}
}
我觉得由于高缩进级别(甚至堆叠using
语句),这变得非常难以理解。但是将其中的一部分提取到新方法中可能会导致需要传递许多参数,因为自然而然的是内部"代码通常需要在using
语句中创建的对象。
在不失去可读性的情况下解决这个问题的优雅方法是什么?
答案 0 :(得分:1)
对于第一部分,this question指的是当不处理AD引用时“任务使用的内存不断增加”
对于第二个,using
块是try/finally
的语法糖,Dispose
块中有finally
调用,这将是一个替代构造,允许您在一个地方处理所有东西,减少缩进