首页 > C# > 在 C# 中将字符串转换为枚举值的最佳方法是什么?

在 C# 中将字符串转换为枚举值的最佳方法是什么?

上一篇 下一篇

在 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#】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 258次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-18
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
单页式简历模板 微信图片 微信模板 微信公众平台 html5 响应式 自适应 微信素材 微信文章 企业网站
您可能会喜欢的其他模板