为了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
使用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; } }
并且您可以为扩展元组添加不同的参数以用于不同的排序选项等。