有人知道如何在代码编辑器中对枚举项进行排序,例如使用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或文本编辑器来执行字母排序。
谢谢
答案 0 :(得分:4)
为了帮助手动排序,您可以使用Resharper功能来移动成员。
Ctrl - Shift - Alt - 向上 / 向下移动枚举声明中光标周围的值。
答案 1 :(得分:3)
:sort
。(养成将尾随逗号添加到最后一个枚举值的习惯很有用,即使它不是必需的,因为它可以更方便地重新排序和添加项目。)
正如@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中并对其进行排序非常容易。