栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在C#中将字符串转换为枚举

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在C#中将字符串转换为枚举

在.NET Core和.NET> 4中,有一个通用的解析方法:

Enum.TryParse("Active", out StatusEnum myStatus);

这还包括C#7的新内联

out
变量,因此可以进行try-parse,转换为显式枚举类型并初始化并填充该
myStatus
变量。

如果您可以访问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);

但是,我会小心地将这样的扩展方法添加到

string
as中(没有名称空间控制),它会出现在
string
它们是否拥有枚举的所有实例上(因此
1234.ToString().ToEnum(StatusEnum.None)
是有效的,但毫无意义)。通常最好避免使用仅适用于非常特定的上下文的额外方法来使Microsoft的核心类混乱,除非整个开发团队对这些扩展的工作有很好的了解。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/568569.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号