c# - 什么时候应该使用 IEnumerable 和 GetEnumerator?

标签 c# .net

在我们的许多项目中,我看到了一些自定义集合/或容器类,它们包含某种通用集合,例如List(of T) 类。

它们通常有一个 GetXXX 方法,该方法返回自定义集合类使用的任何类型的 IEnumerable,因此可以使用 foreach 循环迭代内部集合。

例如

public IEnumerable<UploadState> GetStates
{
    get
    {
        return new List<UploadState>(m_states);
    }
}

我的问题是,这些类是否应该实现 IEnumerable 接口(interface),并在 List 本身上调用 GetEnumerator

是否有首选方式,还是由开发人员决定?

最佳答案

如果您的类是自定义集合类,那么是的,它应该实现 IEnumerable<T> .在这种情况下,内部列表的公共(public)属性将是多余的。想象一个简单的类:

public class People : IEnumerable<Person>
{
    List<Person> persons = new List<Person>();

    public IEnumerator<Person> GetEnumerator()
    {
        return persons.GetEnumerator();
    }
}

但是如果你的类不能像一个集合一样,那么提供一个公共(public)的IEnumerable其元素的属性:

public class Flight
{
    List<Person> passengers = new List<Person>();

    public IEnumerable<Person> Passengers
    {
        get { return passengers; }
    }
}

无论如何,选择正确的设计始终取决于开发人员。

关于c# - 什么时候应该使用 IEnumerable 和 GetEnumerator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9838050/

相关文章:

c# - 如何使用 C# 编写自动化系统测试?

c# - WPF View 给出错误

c# - 我可以在智能感知中订购枚举值吗?

c# - 为什么使用非十进制数据类型对金钱不利?

c# - 谁在 C# 中调用 Main() 方法? Main()方法异常时如何退出应用程序?

c# - Mongodb c# 库异步

c# - 具有 IDisposable 的无限状态机

c# - 在 php 或 JS 中解压缩 SharpZipLib 字符串?

.net - 将重要代码转换为新的 .NET 异步模式 - 如何处理产量循环

.net - 用于安装或卸载 .NET Windows 服务的批处理脚本