为UI目的排序枚举

kar*_*lis 12 c# asp.net enums

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

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

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

Pao*_*sco 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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Fre*_*örk 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);
Run Code Online (Sandbox Code Playgroud)

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