Вы могли использовать маркеры RSA SecurID , которые являются небольшими дисплеями связки ключей, которые изменяют число, отображаемое всех минуту. В дополнение к требованию имени пользователя и пароля, можно также потребовать, чтобы они ввели номер, который они видят на их маркере, чтобы проверить, что у них есть устройство с ними. Существуют различные аппаратные аппаратные ключи с некоторыми даже требование, чтобы PIN был введен для наблюдения изменяющегося числа. Дополнительной сложности на стороне сервера, но клиента не испытывает слишком много затруднений.
Реализуйте свой собственный 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);
}
}
}
}
Возможно, вы могли бы создать метод расширения для класса 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;
}
}
И вы можете добавить различные параметры в метод расширения для различных вариантов сортировки и т. д.
Вы можете использовать расширение 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);
Затем оберните различные альтернативы сортировки в методы и вызвать правильный в зависимости от предпочтений / ввода пользователя.