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;
        }
    }
    

      

         

         

       

        

  • 相关阅读:
    hadoop3.2.0集群搭建的一些坑!
    springboot整合elasticJob实战(纯代码开发三种任务类型用法)以及分片系统,事件追踪详解
    Flask接口返回JSON格式数据自动解析
    Struts2--国际化
    Struts2--标签tag
    Struts2-OGNL
    Struts2--拦截器Interceptor
    Struts2--struts.xml详解
    Spring--事务管理
    Spring--JDBC
  • 原文地址:https://www.cnblogs.com/gdouzz/p/6687525.html
Copyright © 2011-2022 走看看