Active directory 使用;使用;实现IDisposable的每个对象的语句?
我目前正在浏览一些读取Active Directory条目并对其进行操作的代码。由于我不必处理这类东西,我对类(Active directory 使用;使用;实现IDisposable的每个对象的语句?,active-directory,idisposable,using-statement,Active Directory,Idisposable,Using Statement,我目前正在浏览一些读取Active Directory条目并对其进行操作的代码。由于我不必处理这类东西,我对类(DirectoryEntry,SearchResultCollection,…)进行了F12,我发现它们都实现了IDisposable接口,但我在代码中看不到任何使用块的 在这种情况下,这些是必要的吗(即,我是否应该盲目地重构它们) 关于这一点,我的另一个问题是(代码中有很多实例化的IDisposable对象:IDisposable不是让东西变得非常“丑陋”吗在这种情况下?我的意思是,
DirectoryEntry
,SearchResultCollection
,…)进行了F12,我发现它们都实现了IDisposable
接口,但我在代码中看不到任何使用块的
在这种情况下,这些是必要的吗(即,我是否应该盲目地重构它们)
关于这一点,我的另一个问题是(代码中有很多实例化的IDisposable
对象:IDisposable
不是让东西变得非常“丑陋”吗在这种情况下?我的意思是,我喜欢使用语句,因为它们基本上可以让我的思维从担心事情中解放出来,但在许多情况下,代码的布局与以下类似:
using (var one = myObject.GetSomeDisposableObject())
using (var two = myObject.GetSomeOtherDisposableObject())
{
one.DoSomething();
using (var foo = new DisposableFoo())
{
MyMethod(foo);
using (...)
using (...)
{
...
}
}
}
我觉得由于缩进级别很高(甚至使用
语句堆叠),这变得非常不可读。但是将其中一些提取到新方法中可能会导致需要传递许多参数,因为“内部”代码通常需要使用
语句在中创建的对象
在不丢失可读性的情况下,解决这个问题的优雅方法是什么?对于第一部分,指的是在不处理AD引用时“任务使用的内存不断增加”
对于第二种情况,using
块是try/finally
和Dispose
块中的Dispose
调用的语法糖,这是一种替代结构,允许您在一个地方处理所有内容,减少缩进对于第一部分,指的是“任务使用的内存增加”不断地“在不处理AD引用时”-对于第二种情况,使用
块是try/finally
的语法糖,在finally
块中使用Dispose调用,这将是一种替代结构,允许您在一个地方处理所有内容,减少缩进。@stuartd感谢链接,这就是ure看起来很有趣(我必须在一分钟内读完).至于try/finally
,哎哟!我忘记了,当然我知道它存在,但只是没有进一步思考。通常,有一两个使用
语句,这不是首选的方式,但有这么多我可以尝试使用它。太糟糕了,它不能自动阻止我忘记处理我声明的所有内容bove:D请随意加上这个简短的回答!加上这个回答,干杯。