如何获取.NET中枚举的值
如何获取.NET枚举的值
在C#6中,获取枚举名称的最佳方式是使用新的nameof
运算符:
nameof(MyEnum.EnumValue); // 输出 > "EnumValue"
这在编译时起作用,枚举在编译结果中被替换为字符串,这意味着这是可能的最快的方式。
任何对枚举名称的使用都会干扰代码混淆,如果你认为枚举名称的混淆是有价值或重要的,那可能是一个完全不同的问题。
这值得更多的关注。除了明显的限制外,即需要在编译时输入,我认为这应该是首选的如果可能的话。'重命名'和'查找所有引用'也会考虑到它,潜在地避免了魔术字符串和重复常量。
所以我猜当枚举值在运行时定义时它不起作用吗?例如:MyEnum variableEnum; variableEnum = setEnumValueMethod(); nameof(variableEnum);
不,因为nameof(variableEnum)
将是"variableEnum"
。它反映了(在构建时)字段/属性/参数/变量的名称而不是值。
是的。不幸的是,如果你这样做:var someEnumvalue = SomeEnum.FooBar; nameof(someEnumvalue);
,它将返回"someEnumValue"
,而你需要nameof(SomeEnum.FooBar)
来得到"FooBar"
。
比我以前使用的Enum.GetName(typeof(EnumType),instanceOfEnum)
好多了。
如何获取.NET枚举的值
在我们的项目中运行良好...
public static String convertToString(this Enum eff) { return Enum.GetName(eff.GetType(), eff); } public static EnumType converToEnum<EnumType>(this String enumValue) { return (EnumType) Enum.Parse(typeof(EnumType), enumValue); }
Enum.GetName接受一个对象参数作为值。这意味着该值将被装箱,这将浪费CPU资源用于分配和垃圾回收。如果这样做很多次,Enum.GetName的吞吐量将比在字典中缓存值并在其中查找名称要低得多。
那么解决方案是什么,应该使用什么替代方法呢?
使我的项目变慢。toString()更快。
如何获取.NET枚举的值
在.NET中,我们经常需要获取枚举类型的值。有几种方法可以做到这一点,下面将介绍一些常用的方法。
方法一:使用Enum.GetName(...)
这是最优雅的方法,专门用于获取枚举类型的值。
var enumValueString = Enum.GetName(typeof (MyEnum), MyEnum.MyValue);
虽然使用.ToString()
也可以实现同样的功能,但这种方法更简洁。
var enumValueString = MyEnum.MyValue.ToString();
方法二:使用C# 6的新语法
在C# 6中,我们可以使用nameof()
来获取枚举类型的值。
nameof(MyEnum.MyValue)
以上是获取.NET枚举值的两种常用方法,根据自己的需求选择合适的方法即可。