一、前言
对于枚举Enum,大家都非常熟悉,但枚举出现的场景非常多的时候,是不是可以抽象出一个通用的解决方式。代码大家都会写,但并不是所有人都喜欢写重复的代码,老是用Ctrl+C和Ctrl+V累不累啊?很多人和我一样,非常不喜欢写重复的代码,代码写多了,BUG就多。对于常见的场景,大部分人都喜欢抽象出来,写一套通用的,每个地方都可以用,而且不易出错。当然,你喜欢Ctrl+C和Ctrl+V,本人也没有办法....
二、int值,string值转换成Enum
如下,一个简单枚举:
public enum ExchangeType { [EnumFieldAttribute("不限", true)] All = 0, [EnumFieldAttribute("深圳证券交易所")] SZSE = 1 }
对于以下输入代码:
ExchangeType type = (ExchangeType)3; if (type == ExchangeType.All) { Console.WriteLine("ExchangeType.All."); } else if (type == ExchangeType.SZSE) { Console.WriteLine("ExchangeType.SZSE."); } else { Console.WriteLine("Non Exist!"); }
对于强制转换,大家猜猜看,会输出什么....
对于结果,大家可以自己去测试下,有可能与你期望的值不一致!
同样对于以下代码:
ExchangeType type;
bool success = Enum.TryParse<ExchangeType>("3", out type);
TryParse执行的返回结果success也是成功的(为true),但期望值也不一定正确。
因此,对于枚举转换来说,还是很容易出错的。所以,必须提供默认的值来确保转换失败时,返回正确的值。对于int值和string值转换成Enum的代码如下:
public static T ToEnum<T>(int value, T defaultT) where T : struct { string enumName = Enum.GetName(typeof(T), value); return ToEnum<T>(enumName, defaultT); } public static T ToEnum<T>(string enumName, T defaultT) where T : struct { if (string.IsNullOrWhiteSpace(enumName)) { return defaultT; } T result; if (!Enum.TryParse<T>(enumName.Trim(), out result)) { return defaultT; } if (Enum.IsDefined(typeof(T), result)) { return result; } return defaultT; }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, return
, enum
, 代码
, result
, 枚举用法
, ios枚举的用法
IsDefined
enum枚举类型的用法、枚举类型enum用法、java枚举类型enum用法、c 枚举类型enum用法、php枚举类型enum用法,以便于您获取更多的相关知识。