繁体   English   中英

我真的需要在每个校长上调用Dispose()吗?

[英]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 ,包括搜索返回的所有用户以及搜索结果集本身。

处理domaingroup对象并不是什么大问题( using()块会很容易)但是我如何处理每个结果? 我是否真的必须遍历该users集合并处理每个users

IDisposable合同就是合同。 预计会被遵循。 如果你不“需要调用Dispose”,他们就不会实施合同......

在现实中,你真的不能告诉正在使用什么类型的对象由特定实例Principal有时候, 必须处理它,有时你不知道 除非您了解Principal的特定实现的某些内部结构,否则您实际上没有办法在运行时进行说明。 例如,如果Principle实例中的基础对象是DirectoryEntry ,那么您应该将其处理掉。 但是,你没有真正的方法在运行时告诉底层对象是什么。 即使你可以 ,简单地调用Dispose似乎也更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM