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