zoukankan      html  css  js  c++  java
  • C#基础之Foreach

         下面是Foreach的介绍。

         如何让一个类可以用Foreach来遍历呢。

         结论:让这个类实现IEnumerable接口。

         这个类有一个public的GetEnumerator的实例方法,并且返回类型中有public 的bool MoveNext()实例方法和public的Current实例属性。

         

     public class Car {
            private string _name;
            private double _capacity; //汽车排量
    
            public string Name { get {
                    return this._name;
                }
                set {
                    //忽然想到这个value指代的是啥
                    this._name = value;
                }
            }
    
            public double Capacity {
                get {
                    return this._capacity;
                }
                set {
                    this._capacity = value;
                }
            }
    
    
            public Car(string name,double capacity) {
                this._capacity = capacity;
                this._name = name;
            }
        }
    

      

        public class MyTest {
            Car[] carArray = new Car[4];
            public MyTest() {
                carArray[0] = new Car("221",101);
                carArray[1] = new Car("222", 102);
                carArray[2] = new Car("223", 103);
                carArray[3] = new Car("224", 104);
            }
        }

          看到这里我们可能会想到可以这么做

          MyTest test=new MyTest();

          foreach(var i in test)... 确定这样可行吗?

          经过测试,我们知道上面是不可行的,错误提示:该命名空间下没有公共的GetEnumerator()定义。

         为了解决这个错误,我们做了如下:

         根据错误提示可以知道,他需要公共的GetEnumerator();所以我给他加了个公共的GetEnumerator();

       public class MyTest {
            Car[] carArray = new Car[4];
            public MyTest() {
                carArray[0] = new Car("221",101);
                carArray[1] = new Car("222", 102);
                carArray[2] = new Car("223", 103);
                carArray[3] = new Car("224", 104);
            }
    
            /// <summary>
            /// 通过这个例子,可以明白了很多东西呀。
            /// </summary>
            /// <returns></returns>
            public IEnumerator GetEnumerator() {
                return this.carArray.GetEnumerator();
            }
        }
    

      经过测试刚好可行,再继续测试可以得到上面的结论二,这里只是因为数组本来里面就实现了moveNext方法和current;

          还有一种方法是:直接实现IEnumerable接口,道理也是一样的。

          上下文关键字 value 用在普通属性声明的 set 访问器中。 此关键字类似于方法的输入参数。 关键字 value 引用客户端代码尝试赋给属性的值。

          顺带提一下value这个东东

    private int _num
    public int num
    { 
        get 
        {
            return _num;
        }
        set(int value)  //其实value就是类似于一个参数传递过来
        {
            _num=value;
        }
    }
    

      

         

         

       

        

  • 相关阅读:
    java基础(七)面向对象(二)
    java基础 (六)面向对象(一)
    java基础(五)
    java基础(四)
    sqlloader导出数据和导入数据
    SQL LOADER 的用法 TXT文件导入非常之快
    在线代码对比/匹配 代码对比 在线文本比较
    JAVA 调用命令并输出
    RFC总结-SD模块
    使用BAPI_ACC_DOCUMENT_POST,创建会计凭证,用BADI扩展字段(转)
  • 原文地址:https://www.cnblogs.com/gdouzz/p/6687525.html
Copyright © 2011-2022 走看看