2009-08-19 10 views
12

Załóżmy, że mamy interfejs użytkownika i w tym interfejsie mamy listę rozwijaną. To menu jest wypełnione przetłumaczonymi wartościami enum.Wyliczenie wyszukujące dla celów interfejsu użytkownika

Łuk, mamy możliwość sortowania według wartości int enum, nazwy enum i przetłumaczonej nazwy enum.

Ale co, jeśli chcemy innego sortowania niż 3 wymienione powyżej. jak radzić sobie z takim wymogiem?

+0

Jakie sortowania byłoby to możliwe? –

+0

użyteczny :) zazwyczaj taki, który jest wymagany przez inną osobę, która myśli, że powinna być w pewien sposób (poza tym, jak programista ustawił wartości int) – karlis

Odpowiedz

11

zaimplementować własną 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); 
      } 
     } 
    } 
} 
3

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

9

Można używać rozszerzenia Linq OrderBy i wykonywać cokolwiek porównanie magia chcesz:

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

Następnie owinąć różne alternatywy sortowanie na metodach i wywołać właściwy w oparciu o preferencje użytkownika /wkład.

0

Perhapse można utworzyć metodę rozszerzenia dla klasy Enum coś takiego:

... Po pierwsze oświadczenie ...

public enum MyValues { adam, bertil, caesar }; 

... następnie w metodzie ...

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

I można dodać różne parametry do Metodego rozszerzenia dla różnych opcji sortowania itp

1

Uporządkuj FileSystemRights wyliczenia przy użyciu LINQ i wiążą się WinForms ComboBox:

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