在编辑器中对枚举项进行排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在编辑器中对枚举项进行排序相关的知识,希望对你有一定的参考价值。

有人知道如何在代码编辑器中对枚举项进行排序,例如使用resharper或其他VS加载项(即按字母顺序或按整数值对项目进行排序)?

在一个项目中,我有一些带有未排序标签的巨大枚举,并且对于对它们进行排序的可读性将是有帮助的。

编辑:只是为了指出,因为很多人提到,如果没有明确的值,我完全知道在编译时分配给枚举项的“自动值”。

为了更清楚一点,有两个例子:

public enum Colors
{
/// <summary>
/// Yellow color
///</summary>
Yellow, 
/// <summary>
/// Green color
///</summary>
Green, 
/// <summary>
/// Blue color
///</summary>
Blue,
/// <summary>
/// Red color
///</summary>
Red
}

- >我们可能想按字母顺序重新排序。由于没有明确定义,因此不使用允许的整数值。

另一个例子 :

  public enum Colors
    {
    /// <summary>
    /// Yellow color
    ///</summary>
    Yellow = 3, 
    /// <summary>
    /// Green color
    ///</summary>
    Green = 1, 
    /// <summary>
    /// Blue color
    ///</summary>
    Blue = 2,
    /// <summary>
    /// Red color
    ///</summary>
    Red = 4
    }

- >我们可能想按数字值重新排序,或者,为什么不按字母顺序排序。等等。

而且我还希望在每个条目之前保留注释,这意味着我不能简单地使用Excel或文本编辑器来执行字母排序。

谢谢

答案

为了帮助手动排序,您可以使用Resharper功能来移动成员。

Ctrl-Shift-Alt-Up / Down可在枚举声明中移动光标周围的值。

另一答案
  1. 选择并剪切枚举值。
  2. 将它们粘贴到Vim中。
  3. :sort
  4. 剪切并粘贴它们。

(养成将尾随逗号添加到最后一个枚举值的习惯很有用,即使它不是必需的,因为它可以更容易地重新排序和添加项目。)

正如@Dean Chalk指出的那样,重新排序枚举中的项目将影响该项目的基础数量,除非您使用显式编号。只有在存储这些数字(例如,存储到数据库),使用它们与外部进程通信或将枚举转换为另一个枚举时,它才会影响您。

另一答案

如果您确定他们的重新排序没有带来任何错误,您可以选择所有这些并粘贴到Excel工作表中,右键单击单元格并使用EXCEL的sort函数,然后将它们复制回VS.

另一答案

这是一个有趣的问题,我也喜欢解决方案,所以我写了一小段实用程序代码来完成这项工作

public static string GetReorderedEnumCode<T>()
{
    var t = typeof (T);
    if (!t.IsEnum)
    {
        throw new ApplicationException("method requires enum as type parameter");
    }
    var sb = new StringBuilder();
    sb.Append(string.Format(@"public enum {0}
{{
", t.Name));
    var names = Enum.GetNames(t);
    var vals = (int[])Enum.GetValues(t);
    Enumerable.Range(0, vals.Length)
                .Select(i => Tuple.Create(names[i], vals[i]))
                .OrderBy(t2 => t2.Item1)
                .ToList()
                .ForEach(r => sb.Append(string.Format("     {0} = {1},",
    r.Item1, r.Item2) + Environment.NewLine));
    return sb.ToString().TrimEnd(',') + "}";
}


public enum TestEnum
{
    FirstValue,
    AnotherValue,
    LastValue
}

var tmp = Utility.GetReorderedEnumCode<TestEnum>();
Debug.Write(tmp);

看看你的调试输出,你会看到你的新代码 - 它不理想,但它给你一个解决方案:)

另一答案

这对我有用:

我复制到记事本++,用过:

Edit -> Line Operators -> Sort command

然后复制回VS.

另一答案

我没有在编辑器(Visual Studio或ReSharper)中找到一个好方法,但是很容易将一个通用的逗号分隔列表复制并粘贴到site like this中并对它们进行排序。

以上是关于在编辑器中对枚举项进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 RecyclerView 中对字符串元素进行排序?

如何在Vue中对对象数组进行排序和过滤

计数 Dijkstra 守卫如何在 Prolog 中对执行进行排序

使用.filter在Javascript中对数据进行排序

django - 根据翻译后的名称在管理 ui 中对模型进行排序

如何在 discord.js 代码块中对 json 对象值进行排序?