在这个问题中: Looping through DirectoryEntry or any object hierarchy - C#
遍历LDAP树的建议答案是
DirectoryEntry root = new DirectoryEntry(someDN);
DoSomething(root);
function DoSomething(DirectoryEntry de){
// Do some work here against the directory entry
if (de.Children != null) {
foreach (DirectoryEntry child in de.Children) {
DoSomething(child);
}
}
}
我的问题是:您是否需要在每次迭代结束时对每个孩子调用Dispose()?或者foreach循环是否会处理对Dispose()的必要调用?或者它们在foreach循环中根本不是必需的(因为循环可能会重新使用本来想要Dispose()的资源)
答案 0 :(得分:2)
是的,你需要给每个孩子打电话Dispose
。当您调用Children
的{{1}}属性时,它实际上会创建新的DirectoryEntry
实例。当您枚举该实例时,它会逐个拉出子条目(并非一次全部拉出),并且它们不会DirectoryEntries
它们(也不会重复使用它们)。由于Dispose
基本上是COM对象 - 处理它(它拥有非托管资源)非常重要。所以正确的方法是这样的:
DirectoryEntry