2013-07-25 2 views
1

Я хочу изменить порядок элементов в наблюдаемой коллекции. Это мой пример код:C#: Linq Reverse Collection failed

 int[] collection1 = new int[] { 1, 2, 3, 4, 5 }; 
     ObservableCollection<int> obColl1 = new ObservableCollection<int>(); 
     foreach (var item in collection1) // initial order 1,2,3,4,5 
     { 
      obColl1.Add(item); 
      Console.WriteLine("Added {0} in ObservableCollection", item); 
     } 
     Console.WriteLine("Now reverse their order"); 

     obColl1.Reverse(); 
     foreach (var item in obColl1) // still show 1,2,3,4,5 instead of 5,4,3,2,1 
     { 
      Console.WriteLine("After reversing ObservableCollection: {0}", item); 
     } 

     Console.WriteLine("Press any key to exit"); 
     Console.ReadKey(); 

В результате выхода все еще показывает тот же порядок, что и первоначальный заказ. Я что-то упускаю? некоторые ошибки?

Спасибо заранее

ответ

2

Вам необходимо присвоить возвращаемое значение объекта

Что-то вроде

int[] collection1 = new int[] { 1, 2, 3, 4, 5 }; 
ObservableCollection<int> obColl1 = new ObservableCollection<int>(); 
foreach (var item in collection1) // initial order 1,2,3,4,5 
{ 
    obColl1.Add(item); 
    Console.WriteLine("Added {0} in ObservableCollection", item); 
} 
Console.WriteLine("Now reverse their order"); 

var ret = obColl1.Reverse(); //try the changes here and the line below. 
foreach (var item in ret) // still show 1,2,3,4,5 instead of 5,4,3,2,1 
{ 
    Console.WriteLine("After reversing ObservableCollection: {0}", item); 
} 

Console.WriteLine("Press any key to exit"); 
Console.ReadKey(); 

От Enumerable.Reverse Method вы увидите, что она имеет тип возвращаемого значения, так что вам нужно назначить это объекту.

3

Вам необходимо переназначить его:

obColl1 = new ObservableCollection<int>(obColl1.Reverse());