相关疑难解决方法(0)

PrincipalSearchResult <T>是否自动处理其集合中的所有元素?

在MSDN文档中找不到任何关于此的内容.

也就是这样做,说:

using(PrincipalSearcher searcher = ...)
{
    foreach (var principal in searcher.FindAll())
    {
        ... do something ...
    } // The PrincipalSearchResult<T> returned by searcher.FindAll is disposed here
}
Run Code Online (Sandbox Code Playgroud)

这是我见过的大多数例子,或者我应该这样做:

using(PrincipalSearcher searcher = ...)
{
    foreach(var principal in searcher.FindAll())
    {
        using (principal)
        {
            // ... do something ...
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)

后者(在迭代期间明确地处理每个项目)看起来"更安全" - 即符合指南以明确处理所有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 …
Run Code Online (Sandbox Code Playgroud)

.net directoryservices principalsearcher

13
推荐指数
2
解决办法
1987
查看次数

如果不使用using语句,是否会导致IDisposable内存泄漏?

如果不使用using语句,是否会导致IDisposable内存泄漏?
如果是这样,如果代码不多,有人可以提供一个内存泄漏示例吗?

c# idisposable

3
推荐指数
1
解决办法
789
查看次数