在SubMethod中将枚举转换为字符串。
在SubMethod中将枚举转换为字符串。
我在寻找正确的类型转换。
有人可以给我指点一下正确的方向吗?
请看下面的示例:
public enum E_Enum1 { Value1, Value2, Value3 } public enum E_Enum2 { Bla, blubb, whatever } public void myMethod(Enum e) { //以int形式打印e.value //打印e.toString() } myMethod(E_Enum2.whatever); myMethod(E_Enum1.Value2);
我想要得到的结果是:
2 whatever 1 Value2
问题的出现原因是需要将枚举类型转换为字符串,但是直接使用ToString()
方法会将枚举值装箱,影响性能。解决方法是使用泛型方法,并限制泛型类型为枚举类型,然后使用ToString("D")
或ToString("G")
方法来将枚举值转换为字符串。另外,也可以使用Convert.ToInt32(e)
方法将枚举值转换为整数,然后再使用ToString()
方法将整数转换为字符串。
以下是解决方法的代码示例:
public void myMethod<TEnum>(TEnum e) where TEnum : Enum { Console.WriteLine(e.ToString("D")); Console.WriteLine(e.ToString("G")); }
调用方法示例:
myMethod(E_Enum2.whatever); myMethod(E_Enum1.Value2);
另外,可以参考微软官方文档中的枚举格式化字符串(Enumeration format strings)进行格式化操作。如果不需要考虑性能问题,也可以直接使用Console.WriteLine(Convert.ToInt32(e)); Console.WriteLine(e.ToString());
来将枚举值转换为字符串。但是需要注意,由于泛型方法的类型约束,应该避免使用string.Format
或字符串插值等方式来进行转换。