9

我正在使用 .NET 的System.DirectoryServices.AccountManagement命名空间做一些 Active Directory 工作。我注意到Principalimplements IDisposable,这会引起一些头痛,因为该名称空间中的所有内容都继承了Principal

例如,考虑以下代码来获取组中的所有用户:

PrincipalContext domain = new PrincipalContext(ContextType.Domain);
GroupPrincipal group = GroupPrincipal.FindByIdentity(domain, "MyGroup");
PrincipalSearchResult<Principal> users = group.GetMembers();

该片段中的每个类型都实现IDisposable了 ,包括搜索返回的所有用户和搜索结果集本身。

处理domainandgroup对象并不是什么大问题(使用块很容易using()),但是我该怎么处理每个结果呢?我真的必须遍历该users集合并处理每一个吗?

4

1 回答 1

4

IDisposable契约就是这样,契约。预计会被遵循。如果您不需要“调用 Dispose”,他们就不会执行合同......

实际上,您无法真正判断特定实例正在使用哪种类型的对象,Principal 有时,您确实必须处理它,有时您不需要。除非您知道Principal. 例如,如果 Principle 实例中的基础对象是 a DirectoryEntry,那么您应该处置它。但是,您没有真正的方法在运行时告诉底层对象是什么。即使可以,简单地调用似乎也更容易Dispose

于 2013-02-12T21:58:51.337 回答