在 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 ...
}
}
}
后者(在迭代期间明确处置每个物品)看起来“更安全”,即符合明确处置所有不可处置物体的准则,但有点混乱;例如,它排除了使用LINQ对搜索结果的重复使用。
回应@Rups评论:
您可以写入一个生成迭代器, 该迭代器返回了父代用器的结果 。
是的,我认为这样可以帮助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 ...)
但有必要吗?