1. 使用 Enum.Parse 方法
将字符串直接转换为枚举值,适用于已知字符串与枚举名称严格匹配的场景。
using System;
public enum MyEnum
{
ValueA = 1,
ValueB = 2,
ValueC = 3
}
public class Program
{
static void Main()
{
string keyName = "ValueB"; // 枚举键名字符串
// 转换方法
MyEnum enumValue = (MyEnum)Enum.Parse(typeof(MyEnum), keyName);
Console.WriteLine($"枚举值: {enumValue} ({(int)enumValue})");
// 输出: 枚举值: ValueB (2)
}
}
注意事项:
严格匹配:字符串必须与枚举名称完全一致(区分大小写)。
异常处理:如果字符串不匹配,会抛出 ArgumentException。建议结合 try-catch:
try
{
var value = (MyEnum)Enum.Parse(typeof(MyEnum), keyName);
}
catch (ArgumentException)
{
Console.WriteLine("无效的枚举名称");
}
2. 使用 Enum.TryParse 方法
安全转换方式,避免异常,推荐在不确定字符串是否合法时使用。
string keyName = "ValueC";
if (Enum.TryParse<MyEnum>(keyName, out MyEnum enumValue))
{
Console.WriteLine($"转换成功: {enumValue}");
}
else
{
Console.WriteLine("转换失败");
}
3. 忽略大小写匹配
允许字符串与枚举名称的大小写不敏感。
string keyName = "valueb"; // 小写
bool success = Enum.TryParse<MyEnum>(keyName, ignoreCase: true, out MyEnum value);
// success = true,value = MyEnum.ValueB
4. 处理包含数值的字符串
如果字符串是枚举值的数值(如 "2"),可直接转换为整数再映射。
string numericString = "2";
if (int.TryParse(numericString, out int numericValue))
{
if (Enum.IsDefined(typeof(MyEnum), numericValue))
{
MyEnum value = (MyEnum)numericValue;
Console.WriteLine(value); // ValueB
}
}
5. 高级场景:反射遍历枚举
获取所有枚举键名与值的映射(例如生成字典)。
csharp
复制
var enumDict = Enum.GetValues(typeof(MyEnum))
.Cast<MyEnum>()
.ToDictionary(e => e.ToString(), e => e);
// 使用字典查询
string keyName = "ValueA";
if (enumDict.TryGetValue(keyName, out MyEnum value))
{
Console.WriteLine(value); // ValueA
}
总结
场景 方法
确定字符串有效且合法 Enum.Parse
需要安全转换 Enum.TryParse
忽略大小写 Enum.TryParse + ignoreCase: true
预加载所有键值对 反射生成字典
字符串为数值格式 先转为 int,再通过 Enum.IsDefined 验证
完整代码示例
using System;
using System.Linq;
public enum MyEnum { ValueA = 1, ValueB = 2, ValueC = 3 }
public class Program
{
static void Main()
{
// 示例1:安全转换(忽略大小写)
string keyName = "valueb";
if (Enum.TryParse<MyEnum>(keyName, ignoreCase: true, out MyEnum value))
{
Console.WriteLine($"转换成功: {value} ({(int)value})");
}
// 示例2:反射生成字典
var enumDict = Enum.GetValues(typeof(MyEnum))
.Cast<MyEnum>()
.ToDictionary(e => e.ToString(), e => e);
Console.WriteLine(string.Join(", ", enumDict));
// 输出: [ValueA, 1], [ValueB, 2], [ValueC, 3]
}
}
通过上述方法,可灵活处理从字符串到枚举值的转换,确保代码健壮性和可维护性。
实例,已测试
public HdhCmsGetEnumValue()
{
string keyName = "purchase_price";
if (Enum.TryParse<HdhCmsPriceType>(keyName, out HdhCmsPriceType enumValue))
{
MessageBox.Show($"转换成功: {(int)enumValue}");
}
else
{
MessageBox.Show("转换失败");
}
}
public enum HdhCmsPriceType
{
purchase_price = 1,
quotation_price = 2,
internet_price = 3
}
查看更多关于C#通过枚举的键名获取枚举值的源码的详细内容...