出于 UI 目的对枚举进行排序

发布于 2024-08-02 17:33:51 字数 143 浏览 4 评论 0原文

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

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

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

Say we have a UI and in this UI we have a dropdown. This dropdown is filled with the translated values of an enum.

Bow, we have the possibility to sort by the int-value of the enum, by the name of the enum, and by the translated name of the enum.

But what if we want a different sorting than the 3 mentioned above. how to handle such a requirement?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

实现您自己的 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);
            }
        }
    }
}

Implement your own 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);
            }
        }
    }
}
巾帼英雄 2024-08-09 17:33:51

您可以使用 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);

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

You can use the Linq extension OrderBy, and perform whatever comparison magic you want:

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

Then wrap the different sorting alternatives into methods, and invoke the right one based on user preferences/input.

卸妝后依然美 2024-08-09 17:33:51

IEnumerable.OrderBy(Func, IComparer)

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

那片花海 2024-08-09 17:33:51

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

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

Sort FileSystemRights enum using Linq and bind to WinForms comboBox:

comboBox1.DataSource = ((FileSystemRights[])Enum.GetValues(typeof(FileSystemRights))).
 OrderBy(p => p.ToString()).ToArray();
寄离 2024-08-09 17:33:51

也许您可以为 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;
        }
    }

并且您可以为不同的排序选项等向扩展方法添加不同的参数。

Perhapse you could create an extension method for the Enum class, like this:

... first the declaration...

public enum MyValues { adam, bertil, caesar };

...then in a method...

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

And you could add different parameters to the extension metod for different sort options etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文