枚举数和 枚举类型可不是一个东西啊
2012-06-05 11:19
211 查看
enum 是枚举类型 不是枚举数
枚举数
枚举数是循环访问其关联集合的对象。它可被视作指向集合中任何元素的可移动的指针。一个枚举数只能与一个集合关联,但一个集合可以具有多个枚举数。C# foreach 语句(Visual Basic 中的 for each)使用枚举数并隐藏操作该枚举数的复杂性。
.NET Framework 提供枚举数作为循环访问一个集合的简单方法。枚举数只读取集合中的数据,无法用于修改基础集合。
有些语言提供一个隐藏直接使用枚举数的复杂性的语句。C# foreach 语句、C++ for each 语句和 Visual Basic For Each 语句使用枚举数。
关于枚举数
一个枚举数展平一个集合,以便可以按顺序访问成员。不同的集合类可能具有不同的序列。例如,ArrayList 的枚举数保留在集合中输入元素时的顺序,而 Hashtable 的枚举数根据元素的哈希代码显示元素。
每一枚举数都基于 IEnumerator 接口或 IEnumerator<(Of <(T>)>) 泛型接口,这两个接口要求以下成员:
Current 属性指向集合中的当前成员。
MoveNext 属性将枚举数移到集合中的下一成员。
Reset 属性将枚举数移回集合的开始处。Current 被定位于第一个元素的前面。Reset 在泛型 IEnumerator<(Of <(T>)>) 接口中不可用。
枚举数的行为
最初,枚举数被定位于集合中第一个元素的前面。Reset 还将枚举数返回到此位置。在此位置上,Current 为未定义。因此,您必须调用 MoveNext,以在读取 Current 的值之前将该枚举数提前到该集合的第一个元素。
Current 返回相同的对象,直到调用 MoveNext 或 Reset 为止。MoveNext 将 Current 设置为下一个元素。
如果 MoveNext 超过集合的末尾,枚举数将被定位在集合中最后一个元素之后,而且 MoveNext 返回 false。枚举数处于这个位置时,随后对 MoveNext 的调用也会返回 false。如果对 MoveNext 的最后一次调用返回 false,则 Current 为未定义。
在非泛型集合中,您可以在调用 Reset 后调用 MoveNext,将枚举数移回集合的开始处。
在泛型集合中,您不能再将 Current 设置为集合的第一个元素;而须创建新的枚举数实例。
只要该集合保持不变,枚举数也就保持有效。如果对该集合进行了更改(例如添加、修改或删除了元素),该枚举数将失效(这一变化是不可逆转的),且其行为将变为未定义。
该枚举数不具有独占访问集合的权限;因此,枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性,可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作,您必须实现自己的同步。
枚举数
枚举数是循环访问其关联集合的对象。它可被视作指向集合中任何元素的可移动的指针。一个枚举数只能与一个集合关联,但一个集合可以具有多个枚举数。C# foreach 语句(Visual Basic 中的 for each)使用枚举数并隐藏操作该枚举数的复杂性。
.NET Framework 提供枚举数作为循环访问一个集合的简单方法。枚举数只读取集合中的数据,无法用于修改基础集合。
有些语言提供一个隐藏直接使用枚举数的复杂性的语句。C# foreach 语句、C++ for each 语句和 Visual Basic For Each 语句使用枚举数。
关于枚举数
一个枚举数展平一个集合,以便可以按顺序访问成员。不同的集合类可能具有不同的序列。例如,ArrayList 的枚举数保留在集合中输入元素时的顺序,而 Hashtable 的枚举数根据元素的哈希代码显示元素。
每一枚举数都基于 IEnumerator 接口或 IEnumerator<(Of <(T>)>) 泛型接口,这两个接口要求以下成员:
Current 属性指向集合中的当前成员。
MoveNext 属性将枚举数移到集合中的下一成员。
Reset 属性将枚举数移回集合的开始处。Current 被定位于第一个元素的前面。Reset 在泛型 IEnumerator<(Of <(T>)>) 接口中不可用。
枚举数的行为
最初,枚举数被定位于集合中第一个元素的前面。Reset 还将枚举数返回到此位置。在此位置上,Current 为未定义。因此,您必须调用 MoveNext,以在读取 Current 的值之前将该枚举数提前到该集合的第一个元素。
Current 返回相同的对象,直到调用 MoveNext 或 Reset 为止。MoveNext 将 Current 设置为下一个元素。
如果 MoveNext 超过集合的末尾,枚举数将被定位在集合中最后一个元素之后,而且 MoveNext 返回 false。枚举数处于这个位置时,随后对 MoveNext 的调用也会返回 false。如果对 MoveNext 的最后一次调用返回 false,则 Current 为未定义。
在非泛型集合中,您可以在调用 Reset 后调用 MoveNext,将枚举数移回集合的开始处。
在泛型集合中,您不能再将 Current 设置为集合的第一个元素;而须创建新的枚举数实例。
只要该集合保持不变,枚举数也就保持有效。如果对该集合进行了更改(例如添加、修改或删除了元素),该枚举数将失效(这一变化是不可逆转的),且其行为将变为未定义。
该枚举数不具有独占访问集合的权限;因此,枚举整个集合本质上不是一个线程安全的过程。若要确保枚举过程中的线程安全性,可以在整个枚举过程中锁定集合。若允许多个线程对集合执行读写操作,您必须实现自己的同步。
相关文章推荐
- JavaScript 这类弱类型的语言,在判断相等方面很麻烦,明明不是一个东西,却相等了。这里通过示例展示 null、 undefined、 0、 false、 "" 的相等情况。 var arr
- C# 给枚举类型增加一个备注特性
- C 语言中布尔值的候选类型是什么?为什么它不是一个标准类型?
- 外围函数不能访问局部类的公有静态成员、类型名、枚举 值(类型名是一个typedef名字,枚举类型名、或一个类名)
- 数据返回的一个字符串类型的 不是json类型
- 关于NBearMapping中枚举类型转换的一个Bug
- 定义一个枚举类型以及switch语句使用
- 一个大专生的自白——为了一个功能不睡不吃的也要搞定,然后就是实践中的理解,不是单纯的去完成某个东西
- 用友uap nc65 如何实现一个下拉框(枚举类型实体)
- 每日一个C++小程序(十)--枚举类型赋值
- 刚刚从微博转到博客,筛选一下不是随手记录的东西转过来,这是一个tableviewcontroller的发现
- java基本数据类型传递与引用传递区别详解(一个大神的解析,不是我。。)
- 将一个枚举类型动态绑定到一个列表控件的方法
- C# 给枚举类型增加一个备注特性
- 别把&和nohup混为一谈, 根本不是同一个东西好不好 ------ 聊聊./a.out & , nohut ./a.out , nohup ./a.out &的区别
- nohup和&不是一个东西
- 遍历一个枚举类型
- SQL里如何查询一个字段里不是数字类型的值出来
- 获取一个SqlParameter参数中的SqlDbType枚举的类型,通过字符串名称
- 那天在CSDN上看到一个网友在华为遇到的面试题是一道乘法题看似简其实并不是因为它们都超出了数据类型的范围,今天做了下加法希望对大家有所启示