在 MSDN 文档中找不到关于此的任何内容。
即是否足够做,说:
using(PrincipalSearcher searcher = ...)
{
foreach (var principal in searcher.FindAll())
{
... do something ...
} // The PrincipalSearchResult<T> returned by searcher.FindAll is disposed here
}
这是我见过的大多数例子,或者我应该这样做:
using(PrincipalSearcher searcher = ...)
{
foreach(var principal in searcher.FindAll())
{
using (principal)
{
// ... do something ...
}
}
}
后者(在迭代期间显式处理每个项目)看起来“更安全” - 即符合显式处理所有 IDisposable 对象的准则 - 但它有点混乱;例如,它禁止使用 LINQ 来迭代搜索结果。
回应@Rup 的评论:
您可以编写一个从父迭代器返回一个结果的 yield 迭代器
是的,我认为这将有助于启用 LINQ。类似于以下扩展方法:
public static IEnumerable<T> EnumerateAndDispose<T>(this IEnumerable<T> collection) where T : IDisposable
{
foreach (T item in collection)
{
using (item)
{
yield return item;
}
}
}
可以用作:
searcher.FindAll().EnumerateAndDispose().Select(... use LINQ ...)
但是有必要吗?