2015-03-19 3 views
0

У меня есть список окон, но он не в том порядке, в котором я их хочу. Я могу получить окна в строку из заголовка - они помещаются в список окон. Я хочу отсортировать этот список в определенном порядке с оценкой 1-го, Control Center 2nd и Login 3rd. Это тот порядок, который я желаю. Я знаю идею о том, как это сделать, но я хочу отсортировать его до того, как он войдет в цикл foreach.Сортировка пользовательского списка C#

private void CloseMainWindows(IEnumerable<Window> Windows) 
    { 
     var winList = Windows.ToList(); 

     winList.Sort()//This is where I want to sort the list. 

     foreach (Window window in winList) 
     { 
      if (window.Title.Contains("Estimate")) 
      { 
       Estimate.closeEstimateWindow(); 
      } 
      if (window.Title.Contains("Control Center")) 
      { 
       ContorlCenter.CloseContorlCenter(); 
      } 
      if (window.Title.Contains("Login")) 
      { 
       login.ClickCanel(); 
      } 
     } 
    } 
+1

'Windows.OrderBy (...)'? – crashmstr

+1

Порядок этого foreach имеет значение? – Paparazzi

+0

Кстати, вы ошибочно написали 'ContorlCenter'. – Zenadix

ответ

3

Один из способов будет иметь функцию просмотра:

int GetTitleIndex(string s) 
{ 
    if (s.Contains("Estimate")) return 0; 
    if (s.Contains("Control Center")) return 1; 
    if (s.Contains("Login")) return 2; 
} 

Затем для сортировки, вы LookUp индексы:

winList.Sort((x, y) => GetTitleIndex(x).CompareTo(GetTitleIndex(y))); 

В качестве альтернативы, вы можете создать т.е список непосредственно с помощью LINQ-х OrderBy:

var winList = Windows.OrderBy(GetTitleIndex).ToList(); 

И на самом деле в вашем случае не нужно даже промежуточный список:

foreach (var window in Windows.OrderBy(GetTitleIndex)) 
{ 
    ... 
} 
+0

Что ты это то, что я искал! –

+0

@TysonH. Если это решит вашу проблему, отметьте ее как принятый ответ. –

+0

Если он просто щелкнул галочкой, я сделал это. –

0

Вы можете сделать что-то вроде этого:

List<Type> data = new List<Type>(); 
data.Sort(new Comparison<Type>(Compare)); 
private static int Compare(Type x, Type y) 
{ 
    //you can compare them like so : 
    //I'll show you an example just for the sake of illustrating how : 
    if(x.Name.ToString().Length > y.Name.ToString().Length) return 1; 
    else return -1; 
    //the logic for the comparison is up to you. 
    //compare the 2 elements. 
} 
+0

Забавный, потому что он не компилируется, потому что я сравнивал две строки неправильно. Остальная часть материала прекрасна – Hristo

+0

http://ideone.com/0GCDIe Вот короткая демонстрация – Hristo

+0

Хорошо ... Я убираю свой комментарий. –

Смежные вопросы