下面是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;
}
}

  

最新文章

  1. Android四大组件--ContentProvider详解(转)
  2. target-action传值
  3. CSS3自适配手机屏幕[转]
  4. python学习之字符串(下)
  5. Oracle 12c(12.1.0.5)OEM server agent 安装配置
  6. Java学习资源整理(超级全面)
  7. 博弈论中的Nim博弈
  8. C#中添加log4net(日志文件)
  9. 搭建开发环境3) Debian8 安装Netbeans
  10. SIFT+BOW 实现图像检索
  11. jquery表单提交的新写法
  12. ScrollView滑动到底部或顶部监听,ScrollView滑动到底部或顶部再继续滑动监听;
  13. BugBugBugBugBugBugBugBugBugBugBugBugBugBugBug
  14. GIAC2018全球互联网架构大会深圳站盛况回顾,定格精彩瞬间!
  15. python-对象方法、静态方法、类方法
  16. Nginx 基于客户端 IP 来开启/关闭认证
  17. 【JavaScript】jsp表格页面记录
  18. vscode - 移动端适配(cssrem)
  19. 8-全排列next_permutation
  20. Gitkraken系列-Gitkraken修改用户名

热门文章

  1. Simulink S-Function的使用(以串口接收MPU6050六轴陀螺仪参数为实例)
  2. 获取nginx日志状态码百分比脚本
  3. 免密码提交gitlab
  4. Springboot +redis+⾕歌开源Kaptcha实现图片验证码功能
  5. BOM与DOM之DOM操作
  6. 【JS】函数提升变量提升以及函数声明和函数表达式的区别
  7. linux中统计文件中一个字符串出现的次数
  8. JDK版本基础知识解释
  9. uni showLoading 还有注意关闭 闭包, .finally
  10. js 对象的深克隆