首页 > 后端开发 > C++ > 如何在C#中安全解析具有默认值的枚举字符串?

如何在C#中安全解析具有默认值的枚举字符串?

Mary-Kate Olsen
发布: 2025-02-01 06:01:09
原创
957 人浏览过

How to Safely Parse Enum Strings with a Default Value in C#?

泛型方法与枚举类型约束

问题描述:

目标是创建一个泛型函数,扩展 Enum.Parse 的功能,允许在找不到匹配的枚举值时指定默认值。该函数也应该不区分大小写。

然而,当尝试使用以下代码定义函数时:

public static T GetEnumFromString<T>(string value, T defaultValue) where T : Enum
{
    // 实现...
}
登录后复制

会遇到一个错误,指出约束不能是特殊类(System.Enum)。

解决方案:

为了解决此错误并允许使用泛型枚举,可以将约束修改为:

public static T GetEnumFromString<T>(string value, T defaultValue) where T : struct, IConvertible
登录后复制

此更新后的约束确保 T 是一个结构体,并且也支持 IConvertible 接口,该接口由枚举实现。

改进后的实现:

以下修改后的代码演示了改进后的实现:

public static class EnumUtils
{
    public static T ParseEnum<T>(string value, T defaultValue) where T : struct, IConvertible
    {
        if (!typeof(T).IsEnum)
        {
            throw new ArgumentException("T must be an enumerated type");
        }

        if (string.IsNullOrEmpty(value))
        {
            return defaultValue;
        }

        foreach (T item in Enum.GetValues(typeof(T)))
        {
            if (item.ToString().ToLowerInvariant().Equals(value.Trim().ToLowerInvariant()))
            {
                return item;
            }
        }

        return defaultValue;
    }
}
登录后复制

此方法现在接受泛型枚举类型,并且是完全类型安全的,确保只返回有效的枚举值。 ToLowerInvariant() 的使用保证了跨文化的正确性。

以上是如何在C#中安全解析具有默认值的枚举字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板