Ответ 1
Чтобы помочь с ручной сортировкой, вы можете использовать функцию Resharper для перемещения членов вокруг.
Ctrl - Shift - Alt - Up/Down, чтобы переместить значение в курсор вокруг объявления enum.
Кто-нибудь знает способ сортировки элементов перечисления в редакторе кода, используя, например, 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 или текстовый редактор для выполнения буквенного сортирования.
Спасибо
Чтобы помочь с ручной сортировкой, вы можете использовать функцию Resharper для перемещения членов вокруг.
Ctrl - Shift - Alt - Up/Down, чтобы переместить значение в курсор вокруг объявления enum.
:sort
.(полезно привыкнуть добавлять конечную запятую к последнему значению перечисления, даже если это не требуется, поскольку это облегчает переупорядочивание и добавление элементов.)
Как отметил @Dean Chalk, переупорядочение элементов в перечислении повлияет на базовое число этого элемента, если вы не используете явную нумерацию. Это повлияет на вас только в том случае, если вы храните эти числа (например, в базе данных), используя их для связи с внешними процессами или приведения вашего перечисления в другое перечисление.
Если вы уверены, что их исправление не содержит ошибок, вы можете выбрать их все и вставить в таблицу Excel, щелкните правой кнопкой мыши на ячейках и используйте функцию sort
EXCEL, а затем скопируйте их обратно в VS.
Это интересная проблема, а 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);
Посмотрите на свой отладочный вывод, и вы увидите новый код - он не идеален, но он дает вам решение:)
Это сработало для меня:
Я скопировал в блокнот ++, используя:
Edit -> Line Operators -> Sort command
Затем скопируйте обратно в VS.
Я не нашел хороший способ в редакторе (Visual Studio или ReSharper), но очень легко скопировать и вставить общий список, разделенный запятыми, в сайт, подобный этому, и попросите их отсортировать их.