.jpg)
在 C# 中将字符串转换为枚举值的最佳方法是什么?
我有一个包含枚举值的 HTML 选择标签。当页面发布时,我想拿起值(将以字符串的形式)并将其转换为相应的枚举值。
在理想的世界中,我可以做这样的事情:
StatusEnum MyStatus = StatusEnum.Parse("Active");
但这不是有效的代码。

网友回答:
使用 (≥ .NET 4.0):Enum.TryParse<T>(String, T)
StatusEnum myStatus;
Enum.TryParse("Active", out myStatus);
可以使用 C# 7.0 的参数类型内联进一步简化它:
Enum.TryParse("Active", out StatusEnum myStatus);

网友回答:
在.NET Core和.NET Framework ≥4.0中,有一个通用的解析方法:
Enum.TryParse("Active", out StatusEnum myStatus);
这还包括 C#7 的新内联变量,因此它会执行 try-parse,转换为显式枚举类型并初始化 + 填充变量。outmyStatus
如果您可以访问 C#7 和最新的 .NET,这是最好的方法。
在.NET中,它相当丑陋(直到4或更高):
StatusEnum MyStatus = (StatusEnum) Enum.Parse(typeof(StatusEnum), "Active", true);
我倾向于通过以下方式简化这一点:
public static T ParseEnum<T>(string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
然后我可以做:
StatusEnum MyStatus = EnumUtil.ParseEnum<StatusEnum>("Active");
评论中建议的一个选项是添加一个扩展,这很简单:
public static T ToEnum<T>(this string value)
{
return (T) Enum.Parse(typeof(T), value, true);
}
StatusEnum MyStatus = "Active".ToEnum<StatusEnum>();
最后,您可能希望有一个默认枚举,以便在无法解析字符串时使用:
public static T ToEnum<T>(this string value, T defaultValue)
{
if (string.IsNullOrEmpty(value))
{
return defaultValue;
}
T result;
return Enum.TryParse<T>(value, true, out result) ? result : defaultValue;
}
这使得这个调用:
StatusEnum MyStatus = "Active".ToEnum(StatusEnum.None);
但是,我会小心地添加这样的扩展方法(没有命名空间控制),它将出现在它们是否拥有枚举的所有实例上(因此有效但无意义)。通常,最好避免使用仅适用于非常特定上下文的额外方法混淆 Microsoft 的核心类,除非您的整个开发团队对这些扩展的作用有很好的了解。stringstring1234.ToString().ToEnum(StatusEnum.None)

网友回答:
请注意,的性能并不理想,因为它是通过反射实现的。(反之亦然。Enum.Parse()Enum.ToString()
如果需要在对性能敏感的代码中将字符串转换为枚举,最好的办法是在启动时创建一个并使用它来进行转换。Dictionary<String,YourEnum>
模板简介:该模板名称为【在 C# 中将字符串转换为枚举值的最佳方法是什么?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。