在编辑器中对枚举项进行排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在编辑器中对枚举项进行排序相关的知识,希望对你有一定的参考价值。
有人知道如何在代码编辑器中对枚举项进行排序,例如使用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
}
- >我们可能想按字母顺序重新排序。由于没有明确定义,因此不使用允许的整数值。
另一个例子 :
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可在枚举声明中移动光标周围的值。
- 选择并剪切枚举值。
- 将它们粘贴到Vim中。
:sort
。- 剪切并粘贴它们。
(养成将尾随逗号添加到最后一个枚举值的习惯很有用,即使它不是必需的,因为它可以更容易地重新排序和添加项目。)
正如@Dean Chalk指出的那样,重新排序枚举中的项目将影响该项目的基础数量,除非您使用显式编号。只有在存储这些数字(例如,存储到数据库),使用它们与外部进程通信或将枚举转换为另一个枚举时,它才会影响您。
如果您确定他们的重新排序没有带来任何错误,您可以选择所有这些并粘贴到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);
看看你的调试输出,你会看到你的新代码 - 它不理想,但它给你一个解决方案:)
这对我有用:
我复制到记事本++,用过:
Edit -> Line Operators -> Sort command
然后复制回VS.
我没有在编辑器(Visual Studio或ReSharper)中找到一个好方法,但是很容易将一个通用的逗号分隔列表复制并粘贴到site like this中并对它们进行排序。
以上是关于在编辑器中对枚举项进行排序的主要内容,如果未能解决你的问题,请参考以下文章
计数 Dijkstra 守卫如何在 Prolog 中对执行进行排序