【问题标题】:DirectoryEntry.Children and DisposeDirectoryEntry.Children 和 Dispose
【发布时间】:2012-08-23 12:16:19
【问题描述】:

当我使用它的孩子时,我不确定如何释放 DirectoryEntry 对象。 我需要释放所有孩子然后释放父母还是只释放父母?

例如,

using(DirectoryEntry entry = new DirectoryEntry())
{
    foreach (DirectoryEntry childEntry in entry.Children)
    {
        ....
    }   
}

够了吗?

或者需要额外的代码比如

using(DirectoryEntry entry = new DirectoryEntry())
{
    foreach (DirectoryEntry childEntry in entry.Children)
    {
        using(childEntry)
        {
            ...
        }
    }   
}

?

【问题讨论】:

  • 在迭代期间操作集合不是一个好主意。这将(并且应该)可能会引发异常。
  • @Patrik,他不是在操纵收藏本身,而是在操纵物品。处置不会从集合中删除。
  • foreach (DirectoryEntry childEntry in entry.Children)...
  • 现在在 C# 中已弃用 foreach 吗? )

标签: c# .net active-directory dispose


【解决方案1】:

您必须释放每个枚举的孩子。

此外,您应该注意,DirectoryEntry.Children 每次访问它的 getter 时都会返回新创建的对象。这令人作呕,因为它粗略地违反了 MS 自己的准则(DirectoryEntry.Children 必须 是一种方法),但这是事实。

所以:

  • 每次枚举子项时,都会获得个实例;
  • 父条目对创建的枚举器实例一无所知,而子条目由枚举器创建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多