сортировка перечисления для цели UI

Вы могли использовать маркеры RSA SecurID , которые являются небольшими дисплеями связки ключей, которые изменяют число, отображаемое всех минуту. В дополнение к требованию имени пользователя и пароля, можно также потребовать, чтобы они ввели номер, который они видят на их маркере, чтобы проверить, что у них есть устройство с ними. Существуют различные аппаратные аппаратные ключи с некоторыми даже требование, чтобы PIN был введен для наблюдения изменяющегося числа. Дополнительной сложности на стороне сервера, но клиента не испытывает слишком много затруднений.

12
задан Erik Schierboom 13 June 2013 в 12:59
поделиться

4 ответа

Реализуйте свой собственный 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);
            }
        }
    }
}
11
ответ дан 2 December 2019 в 06:26
поделиться

Возможно, вы могли бы создать метод расширения для класса 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;
        }
    }

И вы можете добавить различные параметры в метод расширения для различных вариантов сортировки и т. д.

0
ответ дан 2 December 2019 в 06:26
поделиться

Вы можете использовать расширение 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);

Затем оберните различные альтернативы сортировки в методы и вызвать правильный в зависимости от предпочтений / ввода пользователя.

9
ответ дан 2 December 2019 в 06:26
поделиться

IEnumerable .OrderBy (Func , IComparer )

3
ответ дан 2 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: