C#中的枚举器(译) 翻译文章,原文链接(已失效):http://www.ondotnet.com/pub/a/dotnet/2004/06/07/liberty.html 如果你正在创建一个表现和行为都类似于集合的类...,允许类的用户使用foreach语句对集合中的成员进行枚举将会是很方便的。...这在C# 2.0中比 C# 1.1更容易实现一些。作为演示,我们先在 C# 1.1中为一个简单的集合添加枚举,然后我们修改这个范例,使用新的C#2.0 枚举构建方法。...C# 2.0 的解救办法 使用C# 2.0 这些问题如同五月末的雪般融化了。在这个例子的2.0版本中,我重写上面的列表,使用C# 2.0的两个新特性:泛型 和 枚举器。...更进一步,由枚举器所返回的值一定是string类型,如果你想要返回其他类型,你可以修改IEnumerable泛型语句,IEnumerable泛型语句将反射新类型。
,也可以定义非静态成员 局部内部类 由于已经在方法中所以它不必要也不能使用访问修饰 只能在方法范围内使用 不能有静态变量 匿名内部类 没有名字的局部内部类因为没有名字所以它也没有构造方法需要用父类的构造器或者实现的接口来创建对象...(创建时写的哪个类的构造器,或者哪个接口那么它的父类就是它),相当于是一次性使用的 new 父类的构造器 或 接口() { 内部写的代码(在new时候就会自动执行) } class Animal{...,用父类构造器创建对象,一次性的类 System.out.println("飞走了"); } ); 枚举 什么是枚举 表示一个事件固定状态。...例如:季节有春夏秋冬四个,性别有男和女,星期有周一到周日 java枚举是一个特殊的类,多个常量的集合。...它父类Enum的构造器两个参数一个是表示类名的字符串,一个相当于是位置的角标。
对于C#里面的Foreach学过 语言的人都知道怎么用,但是其原理相信很多人和我一样都没有去深究。...刚回顾泛型讲到枚举器让我联想到了Foreach的实现,所以进行一番探究,有什么不对或者错误的地方大家多多斧正。 1、创建一个控制台应用程序 ?...所以foreach实际上是编译器编译后先调用GetEnumerator方法返回Enumerator的实例,这个实例即是一个枚举器实例。
本文告诉大家如何遍历枚举 遍历枚举是很简单,请看下面代码 StringBuilder sdqsuhDboyowb=new StringBuilder();...{ sdqsuhDboyowb.Append(temp + "\r\n"); } 使用 Enum.GetNames ,参数是枚举的类型就可以遍历...{ sdqsuhDboyowb.Append(temp + "\r\n"); } 实际上就是使用 Enums.GetNames 传入枚举类型
这是一个常用到的问题,例如将枚举绑定到一个DropdownList…… 我是这样实现的: public enum BusinessTable { 商店 = 2,
C#中的内部类能够使用外部类定义的类型和静态方法,但是不能直接使用外部类的实例方法,直接看来,外部类对于内部类的作用更像是一个命名空间,在C#中,始终可以用(只要访问控制允许) Sys.Model.Key...类似于Java中的静态内部类。 在C#中,类区分为Nested Class和Not-Nested Class,前者是声明在其他数据类型内部的类。...创建内部类的一个目的是为了抽象外部类的某一状态下的行为,或者内部类仅在外部类的某一特定上下文存在。或是隐藏实现,通过将内部类设为private,可以设置仅有外部类可以访问该类。...内部类的另外一个重要的用途是当外部类需要作为某个特定的类工作,而外部类已经继承与另外一个类的时候,因为C#不支持多继承,所以创建一个对应的内部类作为外部类的一个façade来使用. ...内部类的反射名称的.改为+,例如:Sys.Model+Key【其中Key是Model的内部类】
public static class EnumExtension { public static string GetDescript...
枚举在C#中都会用到,但是你是否想过,枚举之间怎么转换?这篇文章我就来说一下枚举之间的转换。...C# 是不支持不同枚举之间的转换的,但是 CLR 支持,因此我们可以利用 CLR 赋值的兼容性来实现枚举之间的转换。...需要注意的是两个枚举类型不许具有相同的基类型才可以利用这个方法转换。 在实际项目中枚举之间转换几乎没什么用,并且有可能出现意想不到的结果。
1.枚举类型 枚举类型不仅可以提高程序的可读性,而且可以减少因底层值发生改变而导致的程序改动。...另外一个好处是枚举类型是强类型,以enum类型作为参数传递时,接受方法必须有一个相同的匹配参数;否则编译器将会报错。 枚举类型的基础类型可以是除 Char 外的任何整型。...Parse方法选取同样的参数,并创建枚举类型的一个实例。 在使用Parse方法之前,一定要确保该枚举成员已经存在,否则系统会抛出一个异常。 ...示例 [C#] using System; public class EnumSample { enum Colors...通过在枚举中添加[flags]属性就可以做到。
枚举的基本用法回顾 以下是一个常见的 C# 枚举(enum)的示例: enum Weekday { Monday, Tuesday, Wednesday, Thursday...枚举常见的设计模式运用 enum 可以应用在许多种设计模式下: 状态模式 策略模式 工厂模式 观察者模式 介绍 状态模式 状态模式用于根据对象的内部状态来改变其行为。...在 C# 中,您可以使用 enum 来表示观察者对象的状态,并使用委托或事件来通知观察者对象。 智能枚举 什么是智能枚举?智能枚举不是官方的一个称谓,而是作者定义的一个名词。...它们还可以使您的代码更加类型安全,因为编译器可以验证您是否使用了正确的枚举值。...智能枚举 = 枚举 + 丰富的行为。 上述示例内容介绍了一个使用 C# 枚举类型实现信用卡类型的示例。
这种用处很大,比如权限、执行状态等,都可以用一个int型保存到数据库中,C#中使用枚举可以处理这个问题。...Permission { create = 1, read = 2, update = 4, delete = 8, } C#...Permission.create | Permission.read | Permission.update | Permission.delete; Console.WriteLine("1、枚举创建...permission); permission = permission & ~Permission.read; Console.WriteLine("5、去掉一个枚举项...permission); permission = permission|Permission.delete; Console.WriteLine("6、加上一个枚举项
这次我们再次来讲解一下开发人员会用但不理解的C#中的知识,这篇文章我们讲解一下枚举器与迭代器的知识。...3.小知识 我们在C#中可以用一行代码完成可枚举对象的实例化和元素填充,这种方法叫做集合初始化器,代码如下: List strList = new List { "张三...C#中迭代器被 IEnumerator 和 IEnumerable 和其对应的泛型接口封装。...内部的逻辑被反转并被切分到编译器生成的枚举器类中的 MoveNext 方法和 Current 属性里。这就意味着当你调用迭代器方法时,实际上时对编译器生成的类进行实例化。...这篇文章基本上涵盖了迭代器和枚举器的所有内容,如果需要进一步学习迭代器与枚举器,需要自己动手实践一下。
如果对一个值可以包含多个,那么可以使用枚举,加上Flags 本文告诉大家如何写一个 Flags。 在写前,需要知道一些基础知识,取反、或、与,如果不知道的话,请去看看基础。..., C = 0x00000100, D = 0x00001000, } 合并多个值 合并多个,使用 | Show show=Show.A | Show.B 枚举通过这个方法可以在一个变量包含多个值...=0; if(包含) { show=show & (~Show.A); } else { show=show | Show.A; } 需要知道在以前,写枚举的值
(string[] args) { TestEnum testEnum = TestEnum.one; // 获取枚举的描述...string thisValue = FetchDescription(testEnum); //获取枚举的值
//默认ZFLText属性值为"Label" [DefaultValue(typeof(DisplayMode), "Label")] public Dis...
今天说一说C#的Enum——枚举「建议收藏」,希望能够帮助大家进步!!! 枚举 枚举类型声明为一组相关的符号常数定义了一个类型名称。...枚举用于“多项选择”场合,就是程序运行时从编译时已经设定的固定数目的“选择”中做出决定。 枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。...若要定义这些值,可以使用枚举类型。枚举类型是使用 enum 关键字声明的。 ...创建枚举时,应选择最合理的默认值并赋给它一个零值。这便使得只要在创建枚举时未为其显式赋值,则所创建的全部枚举都将具有该默认值。枚举中大小写敏感,但是建议不要这样。 ...在C#中,枚举的真正强大之处是它们在后台会实例化为派生于基类System.Enum的结构。这表示可以对它们调用方法,执行有用的任务。
C# 结构体(Struct) 在 C# 中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。 结构体是用来代表一个记录。...在 C# 中的结构与传统的 C 或 C++ 中的结构不同。C# 中的结构有以下特点: 结构可带有方法、字段、索引、属性、运算符方法和事件。 结构可定义构造函数,但不能定义析构函数。...枚举(Enum) 枚举是一组命名整型常量。...枚举类型是使用 enum 关键字声明的。 C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。...enum { enumeration list }; 枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0。
有时候需要把枚举转字符串,那么如何把枚举转字符串?...枚举转字符串 假如需要把枚举转字符串,可以直接把他进行转换,请看代码 public enum Di { /// ...Main(string[] args) { Console.WriteLine(Di.Railway.ToString()); } 这样就可以把枚举转字符串...除了这个方法,可以使用 C# 6.0 的关键字,请看代码 Console.WriteLine(nameof(Di.Railway)); 字符串转枚举 如果把一个枚举转字符串,那么如何把字符串转枚举
实现了IEnumerator接口的类称为枚举器 IEnumerator接口 using System.Runtime.InteropServices; namespace System.Collections...2、枚举器实现了IEnumerator接口,所以它能做IEnumerator接口定义的所有工作 3、对于有枚举器的类型而言,必须有一个方法来获取它,获取一个对象枚举器的方法是调用对象的GetEnumerator...方法,实现GetEnumerator方法的类型叫做可枚举类型(enumerable),数组是可枚举类型 释义: 所以在此案例中,采用GetEnumerator()方法将获取到的数组的枚举器赋值给定义为枚举器类型的...ie,GetEnumerator()方法获取到的是返回的枚举器的实例 调用方法时MoveNext要在前,Current方法在后。...否则会出现枚举器还处于数组序列中第一项之前时,便先要输出的Current值,结果错误。