[英]Do I really need to call Dispose() on every Principal?
我正在使用.NET的System.DirectoryServices.AccountManagement
命名空间进行一些Active Directory工作。 我注意到Principal
实现了IDisposable
,因为该命名空间中的所有东西都继承了Principal
,所以会引起一些麻烦。
例如,考虑以下代码来获取组中的所有用户:
PrincipalContext domain = new PrincipalContext(ContextType.Domain);
GroupPrincipal group = GroupPrincipal.FindByIdentity(domain, "MyGroup");
PrincipalSearchResult<Principal> users = group.GetMembers();
该代码段中的每个类型都实现了IDisposable
,包括搜索返回的所有用户以及搜索结果集本身。
处理domain
和group
对象并不是什么大问题( using()
块会很容易)但是我如何处理每个结果? 我是否真的必须遍历该users
集合并处理每个users
?
IDisposable
合同就是合同。 预计会被遵循。 如果你不“需要调用Dispose”,他们就不会实施合同......
在现实中,你真的不能告诉正在使用什么类型的对象由特定实例Principal
有时候, 你必须处理它,有时你不知道 。 除非您了解Principal
的特定实现的某些内部结构,否则您实际上没有办法在运行时进行说明。 例如,如果Principle实例中的基础对象是DirectoryEntry
,那么您应该将其处理掉。 但是,你没有真正的方法在运行时告诉底层对象是什么。 即使你可以 ,简单地调用Dispose
似乎也更容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.