gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:27:04 24 4
gpt4 key购买 nike

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

我有一个包含枚举值的 HTML 选择标记。当页面发布时,我想提取值(将以字符串的形式)并将其转换为相应的枚举值。

在理想世界中,我可以做这样的事情:

StatusEnum MyStatus = StatusEnum.Parse("Active");

但这不是有效代码。

最佳答案

在 .NET Core 和 .NET Framework ≥4.0 there is a generic parse method :

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 因为(没有命名空间控制)它将出现在 string 的所有实例上,无论它们是否持有枚举或不是(因此 1234.ToString().ToEnum(StatusEnum.None) 将是有效但荒谬的)。通常最好避免使用仅适用于非常特定上下文的额外方法来混淆 Microsoft 的核心类,除非您的整个开发团队非常了解这些扩展的作用。

关于c# - 在 C# 中将字符串转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com