厦门南希网站建设,太原制作微信网站,网站做cpa赚钱吗,江西机场建设集团网站前言#xff1a;我相信大家在编写代码时经常会遇到各种状态值#xff0c;而且为了避免硬编码和代码中出现魔法数#xff0c;通常我们都会定义一个枚举#xff0c;来表示各种状态值#xff0c;直到我看到Java中这样使用枚举#xff0c;我再想C# 中可不可以这样写#xff… 前言我相信大家在编写代码时经常会遇到各种状态值而且为了避免硬编码和代码中出现魔法数通常我们都会定义一个枚举来表示各种状态值直到我看到Java中这样使用枚举我再想C# 中可不可以这样写今天就分享一下我的感悟。1switch中使用枚举在没有进某唐时我也是这样的写的代码很烂违法了开闭原则扩展性极差。在代码规范中是不允许出现这样的写法的。对于上面的写法可以使用设计模式来重构。后面会继续更新设计模式的文章。2类型转换EnumTricks.IsVolumeHigh((Volume)27);EnumTricks.High((int)Medium);关于枚举的MSDN文档说了什么“The enum keyword is used to declare an enumeration, a distinct type that consists of a set of named constants called the enumerator list. Every enumeration type has an underlying type, which can be any integral type except char. The default underlying type of the enumeration elements is int. By default, the first enumerator has the value 0, and the value of each successive enumerator is increased by 1.1没有类型安全枚举是简单的值类型可以提供对无效值的保护并且不会出现任何行为。他们是有用的因为他们是魔法数字的改进但就是这样。如果要约束类型可能的值枚举不一定能帮助您因为仍然可以提供无效类型。例如此枚举有三个值默认情况下将具有int类型。值范围为1到3。这应该失败至少在运行时。它没有。这真的很奇怪......在编译期间或运行期间都不会检测到错误的调用。你会觉得自己处于一个虚假的安全状态。如果我们把传进去的枚举转换为string时来看看这两种情况有什么不同 我不知道大家平时在使用枚举的时候是否有意识检查传入的是否是有效的值。可以使用Enum.IsDefined()来检查int值是否是一个有效的值解决方案如果int值在枚举值的定义范围内则使用Enum.IsDefined()查找。如果在范围内则返回True否则返回False。2转化您是否尝试过将enum转换为intint转换为enumstring转换为enum将字符串转换为enum的int值如下代码是不是我们日常的代码中也有这样的类型转换代码不是说不好只是类型转换也是有性能损失的如果能换中方式可以同样实现而且还避免以上问题岂不是更好这样我们的代码也更好维护和扩展下面我们通过使用枚举类的方式来解决这个问题。代码如下Error文件下异常中间件Response文件夹最后推荐一个类库这是我在Nuget上发现的枚举类库地址https://github.com/ardalis/SmartEnum好了先分享到这里希望对你有帮助和启发。参考资料1https://docs.microsoft.com/zh-cn/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/enumeration-classes-over-enum-types2https://ardalis.com/enum-alternatives-in-c 原文地址https://www.cnblogs.com/runningsmallguo/p/10962414.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com