zoukankan      html  css  js  c++  java
  • IEnumerable和IEnumerator

    我们写一些实体类的时候,总希望它们可以进行foreach遍历,但是默认的是不能进行foreach遍历。

         假如我有一个汽车类和一个汽车工厂类见下面代码:

    public class Car
        {
            
    private string _name;

            
    public string Name
            {
                
    get
                {
                    
    return _name;
                }
                
    set
                {
                    _name 
    = value;
                }
            }

            
    public Car(string name)
            {
                _name 
    = name;
            }
        }

        
    public class CarFactory
        {
            
    private Car[] carArry;

            
    public CarFactory()
            {
                carArry 
    = new Car[2];
                carArry[
    0= new Car("carA");
                carArry[
    1= new Car("carB");
            }
        }

     

          然后在客户端进行使用

    static void Main(string[] args)
            {
                CarFactory carFactory 
    = new CarFactory();

                
    foreach (Car c in carFactory)
                {
                    Console.WriteLine(c.Name);
                }
            }

          现在你会发现编译器通不过,会提示一个这样的错误:

    “错误 1 “ConsoleApplication1.CarFactory”不包含“GetEnumerator”的公共定义,因此 foreach 语句不能作用于“ConsoleApplication1.CarFactory”类型的变量 D:\VS2008\Test\ConsoleApplication1\ConsoleApplication1\Program.cs 14 13 ConsoleApplication1”

          它提示说我们的类中没有实现GetEnumerator方法。

          这时我们只需要把我们的CarFactory类实现IEnumerable接口就可以了,见下面代码:

         

     public class CarFactory:IEnumerable
        {
            
    private Car[] carArry;

            
    public CarFactory()
            {
                carArry 
    = new Car[2];
                carArry[
    0= new Car("carA");
                carArry[
    1= new Car("carB");
            }

            
    #region IEnumerable 成员

            
    public IEnumerator GetEnumerator()
            {
                
    return carArry.GetEnumerator();
            }

            
    #endregion
        }

         参考书:《C#与.Net3.0高级程序设计》

  • 相关阅读:
    Linux 虚拟机虚拟网卡问题导致无法连接问题
    使用 Load Balancer,Corosync,Pacemaker 搭建 Linux 高可用集群
    如何在 Linux 虚拟机上扩展根文件系统
    Linux 虚拟机中配置 GNOME + VNC
    在 Linux 中使用 Azure Premium 存储的基本优化指南
    如何为运行的 ARM Linux 启用 LAD2.3 版本的诊断扩展
    如何解决 Linux 虚拟机磁盘设备名不一致的问题
    Java 调用 Rest api 设置经典 Linux 虚拟机的实例启停
    CentOS: 将虚拟机迁移到 Azure (以阿里云为例)
    Linux 虚拟机的计划维护
  • 原文地址:https://www.cnblogs.com/engine1984/p/1729792.html
Copyright © 2011-2022 走看看