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;
}
}
C#基础之Foreach的更多相关文章
- [c#基础]集合foreach的必要条件和自定义集合
引言 最近翻看了之前的学习笔记,看到foreach,记得当时老师讲的时候,有点犯浑,不是很明白,这好比,上小学时,你不会乘法口诀,但是随着时间的增长,你不自觉的都会了,也悟出个小道理,有些东西,你当时 ...
- Java基础(6):foreach 方法遍历数组
foreach 并不是 Java 中的关键字,是 for 语句的特殊简化版本,在遍历数组.集合时, foreach 更简单便捷.从英文字面意思理解 foreach 也就是“ for 每一个”的意思,那 ...
- 【Java基础】foreach循环
从一个小程序说起: class lesson6foreach { public static void main(String[] args) { int array[]={2,3,1,5,4,6}; ...
- 001——数组(一)数组知识及foreach函数应用
<?php /**数组(一)数组知识及foreach函数应用*/ /*数组:在一个变量中,存储一个或多个值,每一个元素都有一个访问ID * * */ /* * //索引型数组 $arr=arra ...
- JavaScript实现Map、Reduce和Filter
1. [代码][JavaScript]代码 <script type="text/javascript">// 函数式编程:// 描述我们要做什么,而不是我们如 ...
- jsp(3,6,9) EL表达式及JSTL
1. jsp 1.1jsp是什么 全称: Java Server Pages,java服务器页面.和Servlet一样,是sun公司定义的一种动态网页开发技术. 特点:基于html模版,可以在h ...
- MyBatis基础入门《二十》动态SQL(foreach)
MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...
- (JavaScript基础向)日常小发现:forEach等函数的第二个参数的用法
forEach函数用得平时用得比较多,但是从来没想到forEach函数还有第二个参数. 这里是菜鸟教程对forEach函数的详细说明:forEach的详细说明. 如上图,forEach函数有第二个参数 ...
- 易优CMS:foreach的基础用法
[基础用法] 名称:foreach 功能:数据/记录循环输出标签(注:类似与volist标签,只是更加简单,没有太多额外的属性.) 语法: {eyou:channel type='top'} {e ...
随机推荐
- HttpServletResponse接口详解
在 Servlet API 中,定义了一个 HttpServletResponse 接口,它继承自 ServletResponse 接口.HttpServletResponse 对象专门用来封装 HT ...
- golang中的标准库flag
Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单. os.Args 如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数. ...
- golang中的标准库time
时间类型 time.Time类型表示时间.我们可以通过time.Now()函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息.示例代码如下: func main() { current := ...
- 集合框架-工具类-JDK5.0特性-静态导入
1 package cn.itcast.p4.news.demo; 2 3 import java.util.ArrayList; 4 //import java.util.Collections; ...
- 鸿蒙轻内核M核源码分析:LibC实现之Musl LibC
摘要:本文学习了LiteOS-M内核Musl LibC的实现,特别是文件系统和内存分配释放部分. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十九 Musl LibC>,作者:zhus ...
- 计算机/linux启动过程
开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程. 分析LINUX开机过程也是深入了解LINUX核心工作原理的一个很好的途径. 计算机开机过程是一个非常复杂的过程,想真正理解透彻并 ...
- v76.01 鸿蒙内核源码分析(共享内存) | 进程间最快通讯方式 | 百篇博客分析OpenHarmony源码
百篇博客分析|本篇为:(共享内存篇) | 进程间最快通讯方式 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) | 同样 ...
- 设置程序启动时加载的storyboard
这个设置表明:程序启动时会加载Main.storyboard
- iOS 动画系列之动画解释
动画解释 译文 http://blog.jobbole.com/69111/ 原文 http://www.objc.io/issues/12-animations/animations-explain ...
- 帆软报表(finereport)根据提供的数据求出该日期所在的季度
根据当前日期求字段中日期的季度 Oracle数据库 select T1.INDEXCODE ,T1.CREATETIME ,CASE when T1.CREATETIME = (case when t ...