如何转换ICollection至IEnumerable?

时间:2014-05-21 22:52:35

标签: c# asp.net active-directory

在下面的代码中,return语句抛出异常。

private IEnumerable<DirectoryEntry> GetDomains()
{
    ICollection<string> domains = new List<string>();

    // Querying the current Forest for the domains within.
    foreach (Domain d in Forest.GetCurrentForest().Domains)
    {
        domains.Add(d.Name);
    }

    return domains;  //doesn't work
}

这个问题的可能解决方案是什么?

3 个答案:

答案 0 :(得分:3)

将您的方法重新定义为

private IEnumerable<string> GetDomains()
{
    ...
}

因为您需要的是string而不是DomainsDirectoryEntry的列表。 (假设您正在添加“d.Name”)

此外,使用LINQ会更容易:

IEnumerable<string> domains = Forest.GetCurrentForest().Domains.Select(x => x.Name);

这将返回IEnumerable<string>,并且不会浪费额外的内存来创建单独的列表。

答案 1 :(得分:0)

将域的类型设置为IList<string> 或者像内森所说的那样:

private IEnumerable<string> GetDomains()
{
  return Forest.GetCurrentForest().Domains.Select(x => x.Name);
}

答案 2 :(得分:-1)

ICollection<T>继承自IEnumerable<T>,因此您可以将其转换:

public interface ICollection<T> : IEnumerable<T>, IEnumerable