Сортировать перечисляемые элементы в редакторе - PullRequest
12 голосов
/ 12 августа 2011

Кто-нибудь знает способ сортировки элементов перечисления в редакторе кода, используя, например, resharper или другую надстройку VS (т.е. сортировать элементы по алфавиту или по целочисленному значению)?

В проекте i 'у нас есть огромные перечисления с несортированными метками внутри, и для удобства чтения будет полезно их отсортировать.

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 или текстовый редактор для выполнения алфавитной сортировки.

Спасибо

Ответы [ 6 ]

4 голосов
/ 12 августа 2011

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

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

3 голосов
/ 12 августа 2011
  1. Выберите и сократите значения перечисления.
  2. Вставьте их в Vim.
  3. :sort.
  4. Вырежьте и вставьте их обратно.

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

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

2 голосов
/ 12 августа 2011

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

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

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

2 голосов
/ 12 августа 2011

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

0 голосов
/ 16 августа 2017

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

Я скопировал в Notepad ++, использовал:

Edit -> Line Operators -> Sort command

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

0 голосов
/ 24 октября 2013

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

...