作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用.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
集合并处理每个集合吗?
最佳答案
IDisposable
契约(Contract)就是那个契约(Contract)。预计将被遵循。如果您“不需要调用Dispose”,他们将不会执行契约(Contract)。
实际上,您无法真正分辨出Principal
的特定实例正在使用哪种类型的对象。有时候,您必须处置它,有时则不需要。除非您知道Principal
特定实现的某些内部知识,否则您实际上无法在运行时进行告知。例如,如果Principle实例中的基础对象是DirectoryEntry
,则应将其处置。但是,您没有真正的方法在运行时告诉该基础对象是什么。即使可以,简单地调用Dispose
似乎也更容易。
关于.net - 我真的需要在每个Principal上调用Dispose()吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14841844/
我是一名优秀的程序员,十分优秀!