为UI目的排序枚举

时间:2009-08-19 10:40:48

标签: c# asp.net enums

假设我们有一个用户界面,在这个用户界面中我们有一个下拉列表。此下拉列表中包含枚举值的翻译值。

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

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

5 个答案:

答案 0 :(得分: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);
            }
        }
    }
}

答案 1 :(得分: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);

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

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

相关问题