首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#的Enum——枚举「建议收藏」

在前面的示例中,Days.Sunday 的值为 0,Days.Monday 的值为 1,依此类推。创建新的 Days 对象时,如果不显式为其赋值,则它将具有默认值 Days.Sunday (0)。...创建枚举时,应选择最合理的默认值并赋给它一个零值。这便使得只要在创建枚举时未为其显式赋值,则所创建的全部枚举都将具有该默认值。枚举中大小写敏感,但是建议不要这样。   ...2、枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示。 3、枚举使代码更易于键入。...最后,注意Enum.Parse()方法实际上返回一个对象引用——我们需要把这个字符串显式转换为需要的枚举类型(这是一个取消装箱操作的例子)。...对于上面的代码,将返回1,作为一个对象,对应于TimeOfDay.Afternoon的枚举值。在显式转换为int时,会再次生成1。

2.3K21

【深入浅出C#】章节 2:数据类型和变量:基本数据类型和引用类型

2.4 类型转换 在C#中,类型转换是将一个数据类型的值转换为另一个数据类型的过程。类型转换可以分为两种:显式转换和隐式转换。...显式转换(Explicit Conversion): 显式转换是通过强制转换的方式将一个类型转换为另一个类型。 当目标类型的范围比源类型更大时,可以使用显式转换,避免数据丢失。...,无需显式指定转换操作符。...当目标类型的范围比源类型更小,且没有数据丢失的风险时,可以使用隐式转换。 隐式转换可以在相容类型之间进行,例如,从int到long、从float到double等。...Tip:类型转换在C#中是实现不同数据类型之间的相互转换的一种机制。通过显式转换和隐式转换,我们可以在需要时将数据从一个类型转换为另一个类型,以满足特定的业务需求。

55610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【深入浅出C#】章节 2:数据类型和变量:类型转换和类型推断

    在C#中,基本类型之间的显式类型转换非常常见和重要,因为它可以帮助我们处理不同数据类型之间的转换和计算。...以下是在显式类型转换中常见的引用类型之间的转换方式: 向上转换(Upcasting): 向上转换是将派生类的实例转换为基类的实例。 这种转换是安全的,因为派生类的实例具有基类的所有成员。...在C#中,有两种类型的转换操作符: 显式转换操作符(explicit): 显式转换操作符用于执行可能存在精度丢失或数据截断的类型转换。...引用类型之间的隐式转换: 从派生类向基类进行转换是隐式的。派生类的实例可以隐式转换为基类类型。...这在需要使用枚举类型的值进行数值计算或比较时很常见。 类型继承关系下的转换: 将派生类的实例隐式转换为基类类型。 这在面向对象编程中很常见,通过将派生类对象视为基类对象来实现多态性。

    46810

    【黄啊码】关于C#的数据类型,初入门的开发者必须学会

    C#的数据类型可以分为3类:数值类型,引用类型,指针类型。 指针类型仅在不安全代码中使用。 值类型包括简单类型(如字符型,浮点型和整数型等),集合类型和结构型。...Sbyte:代表有符号的8位整数,数值范围从-128 ~ 127 Byte:代表无符号的8位整数,数值范围从0~255 Short:代表有符号的16位整数,范围从-32768 ~ 32767 ushort...char:代表无符号的16位整数,数值范围从0~65535。 Char类型的可能值对应于统一字符编码标准(Unicode)的字符集。...小数类型较浮点类型而言,具有更大的精确度,但是数值范围相对小了很多。将浮点类型的数向小数类型的数转化时会产生溢出错误,将小数类型的数向浮点类型的数转化时会造成精确度的损失。...因此,两种类型不存在隐式或显式转换。布尔型:值为true或false。没有标准能实现布尔类型和其他类型的转换。 1.2 枚举类型 枚举类型的元素使用的类型只能是long,int,short,byte。

    58610

    框架设计原则和规范(二)

    用枚举加强一些数值的类型性 1.8.2. 优先使用枚举而不是静态常量 1.8.3. 不要把枚举用于开放的集合(如操作系统版本、朋友名字这类) 1.8.4....不要提供为了今后使用而保留的枚举值 MIDAS里面就有一个这样的问题,导致使用者误用了这个错误的值 1.8.5. 避免显式的暴露只有一个值的枚举 1.8.6....要有限使用成员重载,而不是定义有默认参数的成员 2.1.2. 显式实现接口成员 C#中实现一个接口有显式和隐式两种。...不要在一个类型中提供具有不同名字的索引器 C#编译器强制 2.2.7.8. 不要使用非默认的索引属性 C#编译器强制 2.2.8....避免在结构中显式的定义默认构造函数 C#编译器在没有显式的某人构造函数时,结构的创建会更快。 2.3.9.

    1.4K50

    C Sharp(六)

    C Sharp(六) 發佈於 2018-10-25 这一篇,讲讲 C# 中的结构体类型和枚举类型。...,但有一些限制: 显式设置数据成员之后,才可以使用这些成员的值 对所有的数据成员赋值之后,才能调用任何函数成员 结构的字段是不允许有初始化语句的。...之前说了,结构是隐式密封的,因此 protected,internal,abstruct,virtual 修饰符不可使用。 与 Swift 类似,C# 中的简单预定义类型在实现方式上是使用结构类型。...另外说一句: JavaScript 中的简单类型如 string 也可以调用方法,他们是在使用值时被临时包装成一个对象。 枚举 ---- 枚举只有一个类型的成员: 命名的整数值常量。...(yellow); //Yellow 打印成员名 } 我们也可以显式的设置每个枚举成员的值和类型: enum TrafficLight: uint { Yellow = 15, Green

    43730

    基于 Data Mesh 构建分布式领域驱动架构的最佳实践

    我们并不关心如何从概念图生成物理模型,因为我们认为,这会将关注点从领域推理转移到可视化编程上。 这个过程并不简单,而且我们也只是刚刚开始。评审步骤无疑很重要,培训和建立实践社区也一样。...因为很小的变化就会产生很大的影响: 各领域都采用同样的风格指南; 特别注重强类型(“Currency”具有“string”所不具有的业务意义); 只要可能就遵循行业标准; 任何东西都有文档记录; 禁用魔术值...企业引用必须以一种共同的方式来定义。  枚举和方案 有些数据元素的值被限制为只能是一组有限可能值中的一个。通常,这种有限值集被称为枚举。 和许多其他语言类似,Protobuf 也支持枚举类型。...在这种情况下,具体的模式需要通过 external_schema 选项显式引用: // 外部模式示例message EventWithExternalSchema { XmlString vendor_string...third-party.xsd 的引用,但为了便于“设计时”使用,必须在元数据中显式引用。

    47520

    细说枚举

    枚举是 C# 中最有意思的一部分,大部分开发人员只了解其中的一小部分,甚至网上绝大多数的教程也只讲解了枚举的一部分。那么,我将通过这篇文章向大家具体讲解一下枚举的知识。...自定义方式又称为为枚举值显式赋值,它的方法如下所示: enum Country { CN = 3, UK, JP = 70, USA = 67 } 我们在代码中将第一个枚举值对应的整数常量设置为了...最后两个枚举值因为显式赋值了因此对应的整数值就是所赋值的数值。 枚举取值也很简单,只需要 枚举名.枚举值 即可,例如 Country.UK。...enum Country:short { CN = 3, UK, JP = 70, USA = 67 } 上面代码中我们显式定义了枚举所使用的基础类型为...1.枚举之间转换 首先我要说明的是在 C# 中不支持不同枚举数组之间的直接转换,所以如果想要实现不同枚举数组之间的转换我们可以利用 CLR 宽松的赋值兼容性这一特点来进行转换,需要转换的两个枚举必须具有相同的基础类型

    1.9K10

    C# Enum设计和使用的相关技巧

    C#的Enum设计的相关指导在网上有相关文章论述: 英文:Design Guidelines Update: Enum Design 中文:C# Idioms: Enum还是Enum Class(枚举类...测试数值中是否已设置标志的一种简便方法为:在数值和标志枚举常量之间执行按位“与”操作,这种方法会将数值中与标志不对应的所有位都设置为零,然后测试该操作的结果是否等于该标志枚举常量。...但是,您可以在数值与 None 枚举常量之间执行逻辑(不是按位)比较,以确定数值中是否已设置任何位。 如果创建的是值枚举而不是标志枚举,创建 None 枚举常量仍十分有用。...不要仅为了反映枚举自身的状态而定义枚举值。例如,不要定义仅用于标记枚举末尾的枚举常量。如果需要确定枚举的最后一个值,请显式检查该值。...原因是即使没有在枚举中定义某个数值,也可以将该数值强制转换为枚举类型。

    1.2K70

    探索 yield 关键字

    引言 「yield」关键字是 C# 中的一种语言特性,用于在枚举器中简化迭代器的实现。...由于我们使用了 yield 关键字,即使我们没有显式地实现IEnumerable和IEnumerator接口,也能够遍历集合对象。...进阶 另一个方面,「异步编程中也常常使用yield来创建异步生成器」。使用yield创建异步生成器可以让我们轻松地以异步方式生成一系列值,而无需显式地管理异步状态。...要注意调用时使用异步迭代器(具有 await 关键字的foreach)来进行遍历>。 上述输出则是一秒输出一个结果,知道全部输出。...总结 使用 yield 关键字可以将一个方法转换为一个返回可枚举对象或迭代器的方法,而不必手动实现 IEnumerable 和 IEnumerator 接口 使用 yield 来创建异步生成器,在某些场景下可以实现更高效

    17820

    基于 Data Mesh 构建分布式领域驱动架构的最佳实践

    我们并不关心如何从概念图生成物理模型,因为我们认为,这会将关注点从领域推理转移到可视化编程上。 这个过程并不简单,而且我们也只是刚刚开始。评审步骤无疑很重要,培训和建立实践社区也一样。...因为很小的变化就会产生很大的影响: 各领域都采用同样的风格指南; 特别注重强类型(“Currency”具有“string”所不具有的业务意义); 只要可能就遵循行业标准; 任何东西都有文档记录; 禁用魔术值...企业引用必须以一种共同的方式来定义。  枚举和方案 有些数据元素的值被限制为只能是一组有限可能值中的一个。通常,这种有限值集被称为枚举。 和许多其他语言类似,Protobuf 也支持枚举类型。...在这种情况下,具体的模式需要通过 external_schema 选项显式引用: // 外部模式示例message EventWithExternalSchema { XmlString...表示的负载可能包含 third-party.xsd 的引用,但为了便于“设计时”使用,必须在元数据中显式引用。

    67220

    C#编程-001:C#简介

    大多数对象访问通过安全的引用实现,以避免无效的调用,并且有许多算法用于验证溢出,指针只能用于调用值类型,以及受垃圾回收器控制的托管对象 对象不能被显式释放,代替为当不存在被引用时通过垃圾回收器回收 只允许单重继承...默认的安全转换是隐式转换,例如加宽整型和从派生类转换为基类。...而布尔型同整型,及枚举型同整型不允许隐式转换,非空指针(通过引用相似对象)同用户定义类型的隐式转换必段被显式的确定,不同于C++的复制构造函数 数组声明语法不同("int[] a = new int[5...]" 而不是 "int a[5]") 枚举位于其所在的名字空间中 C#中没有模版,但是在C# 2.0中引入了泛型,并且支持一些C++模版不支持的特性。...因此虽然最终的程序在表面上仍然与传统意义上的可执行文件都具有“.exe”的后缀名。但是实际上,如果计算机上没有安装.Net Framework,那么这些程序将不能够被执行。

    21310

    《CLR via C#》笔记:第3部分 基本类型(2)

    【本博客有如下定义“Px x”,第一个代表书中的页数,第二个代表大致内容从本页第几段开始。...它从System.Enum直接派生,枚举类型是值类型,但枚举方法不能定义任何方法、属性或事件。(P320 2)C#编译器将枚举类型视为基元类型。所以可用许多熟悉的操作符(==,!...所有数组类型都隐式地从System.Array抽象类派生,后者又派生自System.Object。这意味着数组始终是引用类型,是在托管堆上分配的。...[] { "Aidan" ,"Grant" }; //也可以利用C#的隐式类型的局部变量和数组,必须保持初始化的值属于同一类型 var names = new[] { "Aidan" ,"Grant"...Stream数组 stream[ , ]s2dim =(stream [ , ]) o2dim; //显式转型为二维String数组 //能通过编译,但在运行时抛出InvalidcastException

    80310

    C# 7.0简而言之 -- 02. C#基础 (1)

    转换 C# 允许在兼容类型的实例间进行转换, 每次转换肯定会从当前的值创造出一个新的值....转换分为显式或隐式: int x = 12345; long y = x; // 隐式 shortz = (short)x; // 显式 隐式转换的条件: 编译器保证转换肯定会成功 转换中没有信息的丢失...引用类型 所有的C#类型分为四种: 值类型 引用类型 泛型类型参数 指针类型 值类型包扩大多数内置的类型(所有的数值类型, char, bool), 还包括自定义的struct和enum(枚举)类型....数值的字面值 数值的字面值可以使用10进制或者16进制来标记; 使用16进制表示的时候前边要加上0x: int x = 123; long y = 0x7F; 从C# 7开始, 你可以在数值的字面值里面加上下划线...针对其它数值类型需要显式转换. 字符串 string (System.String), 表示了一串不可变的Unicode字符.

    1K120

    【C# XML 序列化】开篇

    文章转载自 C# XML序列化_黑哒哒的盟友的博客-CSDN博客_c# xml序列化 XML 概念 XML 序列化中的中心类是 XmlSerializer 类,此类中最重要的方法是 Serialize...XML 序列化程序生成器工具 (Sgen.exe) 旨在预先生成要与应用程序一起部署的这些序列化程序集,并改进启动性能。...XmlSerializer 生成的 XML 流符合万维网联合会 (W3C) XML 架构定义语言 (XSD) 1.0 建议。而且,生成的数据类型符合文档“XML 架构第 2 部分:数据类型”。...尽量不要将比较大的属性放在默认构造函数初始化,那会导致在反序列化时对列表初始化两次:默认构造函数中执行一次,反序列化时从XML文档读取再执行一次。...这是因为 DataContratSerializer 显式显示了哪些字段或属性被序列化为 XML。

    50531

    【译】C# 11 特性的早期预览

    的参数应用于其名称的运算符将以可空状态为非空开始。即使参数本身的类型可能为 null,也是如此。这可能发生在显式可为空的类型(例如字符串?)或不受约束的类型参数中。 当 !!...参数上的语法与参数上的显式可空类型相结合,编译器将发出警告: void WarnCase( string? name!!...// Okay ) 构造函数 当您从代码中的显式空检查更改为使用空验证语法 (!!) 进行空检查时,会有一个很小但可以观察到的变化。...您的显式验证发生在使用 this 调用的字段初始值设定项、基类构造函数和构造函数之后。使用参数空检查语法执行的空检查将在任何这些执行之前发生。...早期的测试人员发现这个顺序很有帮助,我们认为这种差异很少会对代码产生不利影响。但在从显式空检查转移到新语法之前,请检查它是否不会影响您的程序。

    1.7K60

    Protobuf 语言指南(proto3)

    对于C#,编译器会从每个.proto文件生成一个.cs文件,其中包含文件中描述的每种消息类型的类。 您可以按照所选语言的教程(即将推出的proto3版本)了解有关为每种语言使用API的更多信息。...请注意,对于标量消息字段,一旦解析了消息,就无法确定字段是否显式设置为默认值(例如,是否设置了布尔值false)或者根本没有设置:您应该记住这一点在定义消息类型时。...有关如何enum在应用程序中使用消息的详细信息,请参阅所选语言的生成代码指南。 保留值 如果通过完全删除枚举条目或将其注释掉来更新枚举类型,则未来用户可以在对类型进行自己的更新时重用该数值。...如果.proto文件中没有给出显式选项java_package,则默认情况下将使用proto包(使用文件中的“package”关键字指定 .proto )。...有关更多信息,请参阅Objective-C生成的代码参考。 --csharp_out生成C#代码DST_DIR。有关更多信息,请参阅C#生成的代码参考。

    5.5K40
    领券