2010-07-02 4 views
6

Я получил установку тестовой коллекции как:Есть ли способ конвертировать наблюдаемую коллекцию в обычную коллекцию?

ObservableCollection<Person> MyselectedPeople = new ObservableCollection<Person>(); 

public MainWindow() 
    { 
     InitializeComponent(); 
     FillData(); 
    } 

public void FillData() 
    { 
     Person p1 = new Person(); 
     p1.NameFirst = "John"; 
     p1.NameLast = "Doe"; 
     p1.Address = "123 Main Street"; 
     p1.City = "Wilmington"; 
     p1.DOBTimeStamp = DateTime.Parse("04/12/1968").Date; 
     p1.EyeColor = "Blue"; 
     p1.Height = "601"; 
     p1.HairColor = "BRN"; 

     MyselectedPeople.Add(p1); 
    } 

После того, как я эта коллекция построила я хотел бы быть в состоянии преобразовать Observable Collection в список типа.

Причина этого заключается в том, что мой основной проект получает общий список с данными, которые я должен преобразовать в коллекцию Observable для использования в gridview, listboxes и т. Д. Данные выбираются в пользовательском интерфейсе, а затем отправляются обратно на исходную сборку для дальнейшего использования.

ответ

10

Я думаю, что самый быстрый способ сделать это с помощью LINQ.

List<Person> personList= MySelectedPeople.ToList(); 

Cheers.

8

Попробуйте следующее

var list = MyselectedPeople.ToList(); 

Убедитесь, что вы System.Linq как один из ваших с помощью утверждений.

5

Это должно сделать это ...

List<Person> myList = MyselectedPeople.ToList<Person>(); 
+2

+1 для того, чтобы не использовать 'var', как будто это было не по вкусу. – Shibumi

4

Я просто хочу отметить, что, помимо очевидного метода расширения Linq, список всегда была перегрузка, которая принимает IEnumerable<T>

return new List<Person>(MyselectedPeople); 
2

Это странно, что ваша спина конец сборки кодируется только принимать List<T> , Это очень ограничительно и мешает вам делать полезные вещи, такие как передача массива, или ObservableCollection<T>, или Collection<T>, или ReadOnlyCollection<T>, или свойства Keys или Values ​​Dictionary<TKey, TValue> или любое из множества других видов, похожих на список. там.

Если возможно, замените задний блок, чтобы принять IList<T>. Затем вы можете просто передать свой ObservableCollection<T> как есть, без необходимости копировать его содержимое в List<T>.

+1

Я видел устаревшие библиотеки или сторонние сборки, которые были плохо разработаны далеко не часто, чтобы найти свою проблему нечетной. –