Сортировка элементов перечисления в редакторе

Кто-нибудь знает способ сортировки элементов перечисления в редакторе кода, используя, например, 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

Чтобы помочь с ручной сортировкой, вы можете использовать функцию Resharper для перемещения членов вокруг.

Ctrl - Shift - Alt - Up/Down, чтобы переместить значение в курсор вокруг объявления enum.

Ответ 2

  • Выберите и обрезайте значения перечисления.
  • Вставьте их в Vim.
  • :sort.
  • Вырезать и вставить их обратно.

(полезно привыкнуть добавлять конечную запятую к последнему значению перечисления, даже если это не требуется, поскольку это облегчает переупорядочивание и добавление элементов.)

Как отметил @Dean Chalk, переупорядочение элементов в перечислении повлияет на базовое число этого элемента, если вы не используете явную нумерацию. Это повлияет на вас только в том случае, если вы храните эти числа (например, в базе данных), используя их для связи с внешними процессами или приведения вашего перечисления в другое перечисление.

Ответ 3

Если вы уверены, что их исправление не содержит ошибок, вы можете выбрать их все и вставить в таблицу Excel, щелкните правой кнопкой мыши на ячейках и используйте функцию sort EXCEL, а затем скопируйте их обратно в VS.

Ответ 4

Это интересная проблема, а Id - тоже решение, поэтому я написал небольшой кусок кода утилиты, чтобы выполнить работу

public static string GetReorderedEnumCode<T>()
{
    var t = typeof (T);
    if (!t.IsEnum)
    {
        throw new ApplicationException("metod 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);

Посмотрите на свой отладочный вывод, и вы увидите новый код - он не идеален, но он дает вам решение:)

Ответ 5

Это сработало для меня:

Я скопировал в блокнот ++, используя:

Edit -> Line Operators -> Sort command

Затем скопируйте обратно в VS.

Ответ 6

Я не нашел хороший способ в редакторе (Visual Studio или ReSharper), но очень легко скопировать и вставить общий список, разделенный запятыми, в сайт, подобный этому, и попросите их отсортировать их.