zhouqijie

集合(Collection)

命名空间System.Collections;
命名空间System.Collections.Generic;

IEnumerable<T> –如果要将foreach语句用于集合,就需要IEnumerable接口。
ICollection<T> –由泛型集合类实现。使用这个接口可以获取集合元素个数复制到数组添加和删除元素
IList<T> –用于可通过位置访问其中的元素列表。这个接口定义了索引器。可以在指定位置InsertRemoveAt
ISet<T> –由集实现,集允许合并不同的集,可以获取交集检查重叠。(包含不重复元素的集合称为集(Set))
IDictionary<TK,TV> –包含由键值的泛型集合类实现。
ILookup<TK,TV> –类似IDictionary,且可以通过一个键包含多个值。
……

List<> –动态列表/动态数组
LinkedList<> –双向链表
SortedList<> –有序列表,按照键给元素排序
Dictionary<> –字典(散列表) Queue<> –队列 Stack<> –栈
SortedDictionary<> –二叉搜索树,其中的元素根据键来排序。
HashSet<T> –HashSet<>集包含不重复元素的无序列表
SortedSet<T> –SortedSet<>集包含不重复元素的有序列表

非泛型的:
ArrayList
HashTable

数组合并了相同类型的对象,而元组合并了不同类型的对象。

元组起源于函数式编程,这些语言频繁使用元组。.NET Framework定义了8个泛型Tuple类和一个静态Tuple类。

索引器

CRE:索引器类似C++的下标运算符。

声明:
public TR this[int index] {get; set;}





迭代

IEnumerator接口

?:枚举器和迭代器关系是:迭代器是指包含多个yield return的语句。枚举器是由迭代器代码返回的。
?:枚举器是迭代器的一种,用于遍历所有元素。
?:foreach语句是枚举器的使用者。即实现了IEnumerable接口才能用foreach遍历。

CurrentMoveNext()Reset()

public MyCollection: IEnumberable
{
    public IEnumerator GetEnumerator()
    {
        //...
        yield return xxx;
        //....
    }
}
IEnumerator it = list.GetEnumerator();
while(it.MoveNext())
{
    Console.WriteLine(it.Current);
}

yield语句

C#2.0添加了yield语句,以便创建枚举器。yield return语句返回集合的一个元素。yield break;可停止迭代。

使用迭代块,编译器会生成一个yield类型,其中包含一个状态机。

IEnumerator的yield return之间还可以执行代码,每MoveNext()就会执行中间的语句。

CRE:利用这个特性可以实现协程。在Unity中使用较多。

(END)