Есть ли способ преобразовать наблюдаемую коллекцию в обычную коллекцию? - PullRequest
6 голосов
/ 02 июля 2010

У меня есть настройка набора тестов как:

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 в тип List.

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

Ответы [ 5 ]

10 голосов
/ 02 июля 2010

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

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

Приветствие.

8 голосов
/ 02 июля 2010

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

var list = MyselectedPeople.ToList();

Убедитесь, что у вас System.Linq в качестве одного из ваших операторов использования.

5 голосов
/ 02 июля 2010

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

return new List<Person>(MyselectedPeople);
5 голосов
/ 02 июля 2010

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

List<Person> myList = MyselectedPeople.ToList<Person>();
2 голосов
/ 03 июля 2010

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

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

...