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

      

         

         

       

        

  • 相关阅读:
    LeetCode 264. Ugly Number II
    LeetCode 231. Power of Two
    LeetCode 263. Ugly Number
    LeetCode 136. Single Number
    LeetCode 69. Sqrt(x)
    LeetCode 66. Plus One
    LeetCode 70. Climbing Stairs
    LeetCode 628. Maximum Product of Three Numbers
    Leetcode 13. Roman to Integer
    大二暑假周进度报告03
  • 原文地址:https://www.cnblogs.com/gdouzz/p/6687525.html
Copyright © 2011-2022 走看看