2009-08-19 52 views
12

假设我们有一个用户界面,并且在此用户界面中有一个下拉菜单。该下拉列表中填入了enum的翻译值。为用户界面排序枚举

鞠躬,我们有可能通过枚举的int值,枚举的名称和enum的已翻译名称进行排序。

但是,如果我们想要一个不同于上述3的排序呢。如何处理这样的要求?

+0

那会是什么样的排序吗? – 2009-08-19 10:43:44

+0

一个有用的:)通常是由另一个人认为它应该在某种方式(除开发商设置int值的方式) – karlis 2009-08-19 10:45:45

回答

11

实现自己IComparer

using System; 
using System.Collections.Generic; 

namespace test { 
    class Program { 

     enum X { 
      one, 
      two, 
      three, 
      four 
     } 

     class XCompare : IComparer<X> { 
      public int Compare(X x, X y) { 
       // TBA: your criteria here 
       return x.ToString().Length - y.ToString().Length; 
      } 
     } 


     static void Main(string[] args) { 
      List<X> xs = new List<X>((X[])Enum.GetValues(typeof(X))); 
      xs.Sort(new XCompare()); 
      foreach (X x in xs) { 
       Console.WriteLine(x); 
      } 
     } 
    } 
} 
3

IEnumerable<T>.OrderBy(Func<T, TKey>, IComparer<TKey>)

9

可以使用LINQ的扩展OrderBy,并执行任何你想要的比较法宝:

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

然后敷不同的排序方案进入方法,并调用根据用户的喜好是正确的/输入。

0

Perhapse你可以创建为枚举类的扩展方法,像这样:

...先声明......

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

而且你可以到扩展梅托德的使用LINQ不同的排序选项等

1

排序FileSystemRights枚举添加不同的参数并绑定到的WinForms组合框:

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