在编辑器中对枚举项排序

本文关键字:排序 枚举 编辑器 | 更新日期: 2023-09-27 18:05:27

是否有人知道在代码编辑器中排序枚举项的方法,例如使用resharper或另一个VS插件(即按字母顺序或按整数值排序)?

在一个项目中,我有一些巨大的枚举,里面有未排序的标签,对它们进行排序将有助于提高可读性。

edit:只是为了指出,因为许多人提到,我完全意识到"自动值"分配给枚举项目在编译时,如果没有显式的值。

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

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或文本编辑器来执行字母排序。

谢谢

在编辑器中对枚举项排序

  1. 选择并切断枚举值。
  2. 粘贴到Vim中
  3. :sort .
  4. 剪切并粘贴回来。

(养成在最后一个enum值后面添加逗号的习惯是很有用的,尽管这不是必需的,因为它使重新排序和添加项更容易。)

正如@Dean Chalk指出的那样,除非使用显式编号,否则对枚举中的项重新排序将影响该项的底层编号。它只会影响你,如果你正在存储这些数字(例如数据库),使用它们与外部进程通信或将你的enum转换为另一个enum。

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

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

这对我有用:

我复制到notepad++,使用:

Edit -> Line Operators -> Sort command

然后复制回vs

如果您确定它们的重新排序不会带来错误,您可以选择所有它们并粘贴到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);

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

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