在 C# 中,将枚举类型转换为字符串是一个常见操作。通常用于日志记录、用户界面显示或数据序列化等场景。实现方式简单直接,下面介绍几种常用方法。
1. 使用 ToString() 方法
最常用的方式是调用枚举值的 ToString() 方法,它会返回该枚举成员的名称字符串。
定义一个枚举:enum Color { Red, Green, Blue }
将其转换为字符串:Color myColor = Color.Red;
string colorName = myColor.ToString(); // 结果是 "Red"
这是最直观、推荐的做法,适用于大多数情况。
2. 处理带 Description 特性的枚举(自定义文本)
如果希望显示更友好的名称(如中文),可以使用 DescriptionAttribute,然后通过反射获取描述文本。
先引入命名空间:using System.ComponentModel;
定义带描述的枚举:[Description("红色")]
public enum Color {
[Description("红色")]
Red,
[Description("绿色")]
Green,
[Description("蓝色")]
Blue
}
public static string GetDescription(Enum value)
{
var field = value.GetType().GetField(value.ToString());
if (field == null) return value.ToString();
var attribute = (DescriptionAttribute)Attribute.GetCustomAttribute(
field, typeof(DescriptionAttribute));
return attribute?.Description ?? value.ToString();
}
调用示例:
Color c = Color.Red;
string desc = GetDescription(c); // 返回 "红色"
3. 使用 nameof 获取枚举名(编译时确定)
如果你只需要某个枚举成员的名称字符串,并且在编译时已知,可以用 nameof。
string name = nameof(Color.Red); // 得到 "Red"
这种方式不涉及运行时计算,性能好,但仅限于常量场景,不能用于变量。
4. 直接转换枚举类型名为字符串(较少用)
若想获取枚举类型的名称(不是值),可使用:
string typeName = typeof(Color).Name; // 得到 "Color"
这和枚举值转字符串无关,注意区分用途。
基本上就这些。日常开发中,ToString() 足够应对多数需求。需要显示中文或说明性文字时,结合 DescriptionAttribute 是标准做法。不复杂但容易忽略细节。
