[0] CollectionBase与索引符DictionaryBase与迭代器
对于简单数组来说,需要用固定的大小来初始化,才能使用:
Animal[] myAnimal=new Animal[10];
myAnimal[0]=new Cow("Ken");
当然,我们可以使用ArrayList集合,它不需要初始化大小:
ArrayList list=new ArrayList();
list.add(new Cow("Jim"));
另外,还可以从System.Collections.CollectionBase类派生自己的集合。配合索引符来访问项。索引符是一种特殊类型的属性,可以把它添加到一个类中,以提供类似于数组的访问。
public class Animals:CollectionBase { public void Add(Animal newAnimal) { List.Add(newAnimal); }
public void Remove(Animal newAnimal) { List.Remove(newAnimal); }
public Animals() { }
public Animal this[int animalIndex] { get { return (Animal)List[animalIndex]; } set { List[animalIndex] = value; } } }
class Program { static void Main(string[] args) { Animals animalCollection = new Animals(); animalCollection.Add(new Cow("Jack")); animalCollection.Add(new Chicken("Vera")); foreach (Animal myAnimal in animalCollection) myAnimal.Feed(); Console.ReadKey(); } }
还可以从DictionaryBase派生集合,配合迭代器使用。允许项通过关键字值(如字符串名)进行索引,而不是通过索引。迭代器是一个代码块,按顺序提供了要早foreach循环中使用的所有值,用yield关键字选择要在foreach循环中使用的值。
public class Animals:DictionaryBase { public void Add(string newID,Animal newAnimal) { Dictionary.Add(newID,newAnimal); }
public void Remove(string animalID) { Dictionary.Remove(animalID); }
public Animals() { }
public Animal this[string animalID] { get { return (Animal)Dictionary[animalID]; } set { Dictionary[animalID] = value; } }
public new IEnumerator GetEnumerator()
{ foreach(object animal in Dictionary.Values)
yield return (Animal)animal;
} }
相关文章
- 24个经典的MySQL索引问题,你都遇到过哪些?
- MySQL索引最佳攻略
- MySQL的Explain关键字查看是否使用索引
- 重学c#系列——索引器(十)
- elasticsearch简介和倒排序索引介绍
- Java数据库篇8——索引、视图、存储过程、触发器
- PCL 计算点云坐标最值及其索引
- 【Java面试题视频讲解】合并相同索引的值
- HBase与时空索引技术
- 数据库索引的作用和长处缺点
- 数据库索引数据结构总结——ART树就是前缀树
- 时间序列数据库——索引用ES、聚合分析时加载数据用什么?docvalues的列存储貌似更优优势一些。那分布式计算呢?ES做
- MongoDB 创建基础索引、组合索引、唯一索引以及优化
- Mysql原理篇之索引是如何一步步实现的---上--02