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

时间:2011-08-12 10:03:07

标签: c# visual-studio visual-studio-2008 resharper

有人知道如何在代码编辑器中对枚举项进行排序,例如使用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
}

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

另一个例子:

  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
    }

- &GT;我们可能希望按数字值重新排序,或者,为什么不按字母顺序重新排序。 等等。

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

谢谢

6 个答案:

答案 0 :(得分:4)

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

Ctrl - Shift - Alt - 向上 / 向下移动枚举声明中光标周围的值。

答案 1 :(得分:3)

  1. 选择并剪切枚举值。
  2. 将它们粘贴到Vim。
  3. :sort
  4. 剪切并粘贴它们。
  5. (养成将尾随逗号添加到最后一个枚举值的习惯很有用,即使它不是必需的,因为它可以更方便地重新排序和添加项目。)

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

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);

查看您的调试输出,您将看到您的新代码 - 它不是理想的但它可以为您提供解决方案:)

答案 4 :(得分:0)

这对我有用:

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

Edit -> Line Operators -> Sort command

然后复制回VS。

答案 5 :(得分:-1)

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