You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何实现基于子串匹配的枚举值查找功能

C# 支持子串匹配的枚举解析实现方案
  • 优先保留原生Enum.TryParse的逻辑,保证原有精确匹配(含忽略大小写)的能力不变
  • 精确匹配失败后,遍历枚举所有字段名,使用子串匹配逻辑校验,支持忽略大小写
  • 封装为通用泛型扩展方法,可适配所有枚举类型,用法和原生TryParse保持一致

通用扩展方法实现

using System;

public static class EnumExtensions
{
    /// <summary>
    /// 尝试解析枚举,支持子串匹配
    /// </summary>
    /// <typeparam name="TEnum">枚举类型</typeparam>
    /// <param name="input">输入字符串</param>
    /// <param name="ignoreCase">是否忽略大小写</param>
    /// <param name="result">输出枚举结果</param>
    /// <returns>是否匹配成功</returns>
    public static bool TryParseContain<TEnum>(string input, bool ignoreCase, out TEnum result) where TEnum : struct, Enum
    {
        result = default;
        // 先走原生精确匹配逻辑
        if (Enum.TryParse(input, ignoreCase, out result))
        {
            return true;
        }

        // 精确匹配失败走子串匹配
        var comparison = ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal;
        foreach (var enumName in Enum.GetNames<TEnum>())
        {
            if (enumName.Contains(input, comparison))
            {
                result = Enum.Parse<TEnum>(enumName);
                return true;
            }
        }

        // 无匹配返回失败
        return false;
    }
}

如果项目使用的C#版本低于7.3,不支持枚举类型约束,可将泛型约束改为where TEnum : struct,并在方法开头添加校验逻辑if (!typeof(TEnum).IsEnum) throw new ArgumentException("TEnum 必须是枚举类型");即可兼容。

示例改造代码

public static void Main()
{
    string a = "HANS";
    GetName(a); // 输出Hans
    
    string a1 = "Peter";
    GetName(a1); // 输出WolfgangPeterDietrich
}

public enum MyNames
{
    Hans = 0,
    WolfgangPeterDietrich = 3,
}

public static void GetName(string a)
{
    if (EnumExtensions.TryParseContain<MyNames>(a, true, out var dif))
    {      
        Console.WriteLine(dif.ToString());
    }
    else
    {
        Console.WriteLine("无匹配枚举值");
    }
}

多匹配场景适配

如果存在多个枚举名称包含目标子串的场景,可按业务需求调整匹配规则:

  • 取第一个匹配值:保持现有逻辑即可
  • 取最短/最匹配值:将所有匹配结果收集后按字符串长度排序后返回
  • 避免歧义:多个匹配时抛出AmbiguousMatchException明确提示冲突

内容的提问来源于stack exchange,提问作者KevinNivek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:39:06