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

如何将字符串中的Enum值替换为对应索引以实现按Enum顺序排序

替换逻辑问题修复方案

核心错误点

你的代码存在3个导致替换不生效的问题:

  • C# 中string是不可变类型,Replace()方法不会修改原字符串,只会返回替换后的新字符串,你没有接收返回值,所以s1、s2始终是原始值
  • s2赋值错误,你写成了s2 = tx.Text,拿到的和s1是同一份值,完全没有用到y参数对应的节点文本
  • 循环条件中使用的positions是未定义变量,你应该以myEnums数组的长度作为循环边界

修正后完整代码

public int Compare(object x, object y)
{
    TreeNode tx = x as TreeNode;
    TreeNode ty = y as TreeNode;

    string s1 = tx.Text;
    string s2 = ty.Text;
    
    MyEnum[] myEnums = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().ToArray();
    for (int i = myEnums.Length - 1; i >= 0; i--)
    {
        MyEnum myEnum = myEnums[i];
        string str = myEnum.ToString();
        string index = ((int)myEnum).ToString();
        // 接收Replace返回值更新字符串
        s1 = s1.Replace(str, index);
        s2 = s2.Replace(str, index);
    }
    return string.Compare(s1, s2);
}

可选优化建议

如果后续枚举项数量超过10个,直接拼接数字会出现位数不同导致的排序错误(比如10会排在2前面),可以将索引格式化为固定长度字符串,示例如下:

string index = ((int)myEnum).ToString("D2");

如果枚举项名称存在互相包含的情况(比如同时存在CAR和CARRIAGE),可以改用正则全字匹配替换,避免误替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:30:05