Копирование List<T> в ObservableCollection<T> не по значению
От: AndrewDenison  
Дата: 24.11.11 18:03
Оценка:
Здравствуйте,

Хочу получить ObservableCollection со ссылками на элементы содержащиеся в List<T>

напримерL
ObservableCollection<string> col = new ObservableCollection<string>(list);
копирует содержимое списка в коллекцию при этом создавая дубликаты строк.
а мне нужно чтобы коллекция содержала ссылки на элементы содержащиеся в списке.

Чтобы изменяя значения элементов в коллекция, они так-же изменялись и в списке.
Re: Дубликаты
От: Qbit86 Кипр
Дата: 24.11.11 18:17
Оценка:
Здравствуйте, AndrewDenison, Вы писали:

AD>копирует содержимое списка в коллекцию при этом создавая дубликаты строк.


Дубликаты ссылочных типов, разумеется, не создаются. Это легко проверить, запихивая в исходную коллекцию какой-нибудь изменяемый класс (каковым строки в .NET не являются), например:
IList<StringBuilder> list = new List<StringBuilder>
{
    new StringBuilder("Foo"),
    new StringBuilder("Bar"),
    new StringBuilder("Qux"),
};
ObservableCollection<StringBuilder> col = new ObservableCollection<StringBuilder>(list);
list[0].Replace('F', 'D');
Console.WriteLine(col[0]);


Другое дело, что создаётся дубликат коллекции. То есть, изменение элементов в list (если бы строки были изменяемыми) — а не ссылок на эти элементы! — отразится и при проходе по коллекции col. Но изменение структуры исходной или целевой коллекции (вставка, удаление, etc) не отразится на другой.

В библиотеке Elevate вроде был аналог ObservableCollection<T>, представляющий из себя не копию передаваемой в конструктор коллекции, а декоратор.
Глаза у меня добрые, но рубашка — смирительная!
Re: Копирование List<T> в ObservableCollection<T> не по знач
От: Hex66 Россия  
Дата: 25.11.11 11:05
Оценка:
Здравствуйте, AndrewDenison, Вы писали:

AD>Здравствуйте,


AD>Хочу получить ObservableCollection со ссылками на элементы содержащиеся в List<T>


AD>напримерL

AD>ObservableCollection<string> col = new ObservableCollection<string>(list);
AD>копирует содержимое списка в коллекцию при этом создавая дубликаты строк.
AD>а мне нужно чтобы коллекция содержала ссылки на элементы содержащиеся в списке.

AD>Чтобы изменяя значения элементов в коллекция, они так-же изменялись и в списке.


Я тоже только начинаю погружаться в C#, но в документации вычитал, что строки являются
не изменяемыми экземплярами. То есть для подобного случая нужно использовать врапер-класс
для строки, возможно есть соответствующий template.
Re[2]: Дубликаты
От: AndrewDenison  
Дата: 25.11.11 13:25
Оценка:
Спасибо! Теперь все понятно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.