在SubMethod中将枚举转换为字符串。

29 浏览
0 Comments

在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

0
0 Comments

问题的出现原因是需要将枚举类型转换为字符串,但是直接使用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或字符串插值等方式来进行转换。

0