为了UI目的排序枚举

假设我们有一个UI,在这个UI中我们有一个下拉列表。 此下拉列表中填充了枚举的翻译值。

鞠躬,我们可以按枚举的int值,枚举的名称和枚举的翻译名称进行排序。

但是如果我们想要一个与上面提到的3不同的排序怎么办 如何处理这样的要求?

实现自己的IComparer

 using System; using System.Collections.Generic; namespace test { class Program { enum X { one, two, three, four } class XCompare : IComparer { public int Compare(X x, X y) { // TBA: your criteria here return x.ToString().Length - y.ToString().Length; } } static void Main(string[] args) { List xs = new List((X[])Enum.GetValues(typeof(X))); xs.Sort(new XCompare()); foreach (X x in xs) { Console.WriteLine(x); } } } } 

您可以使用Linq扩展OrderBy ,并执行您想要的任何比较魔术:

 // order by the length of the value SomeEnum[] values = (SomeEnum[])Enum.GetValues(typeof(SomeEnum)); IEnumerable sorted = values.OrderBy(v => v.ToString().Length); 

然后将不同的排序备选方法包装到方法中,并根据用户首选项/输入调用正确的排序方法。

IEnumerable.OrderBy(Func, IComparer)

使用Linq对FileSystemRights枚举进行排序并绑定到WinForms comboBox:

 comboBox1.DataSource = ((FileSystemRights[])Enum.GetValues(typeof(FileSystemRights))). OrderBy(p => p.ToString()).ToArray(); 

Perhapse你可以为Enum类创建一个扩展方法,如下所示:

…首先是宣言……

 public enum MyValues { adam, bertil, caesar }; 

……然后用一种方法……

 MyValues values = MyValues.adam; string[] forDatabinding = values.SpecialSort("someOptions"); ...The extension method... public static class Utils { public static string[] SpecialSort(this MyValues theEnum, string someOptions) { //sorting code here; } } 

并且您可以为扩展元组添加不同的参数以用于不同的排序选项等。