Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
5 / 5 / 4
Регистрация: 06.05.2010
Сообщений: 180

(ICollection<Obj>)IColllection<Person>

25.07.2010, 06:58. Показов 1560. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!

не подскажете как выполнить такое приведение типов?

C#
1
2
var list1= new Collection<Person>(); //Person : Obj
var list2= (Collection<Obj>)list1; //вот тут ругается, что приведение невозможно
или может это как то можно сделать без приведения, но чтобы list2 влез в метод с таким объявлением и хранил ссылку на реальный list1
C#
1
public void Init (ICollection<Obj> model)
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.07.2010, 06:58
Ответы с готовыми решениями:

Парсинг структуры файла *.obj
Доброго времени суток, посетители форума cyberforum.ru. Возникла проблема с реализацией парсинга структуры файла в программе....

Obj.method<T>(arg) - как можно задать T неявно, из экземпляра
Собственно проблема видна из заголовка. Пробовал что-то типа string type = &quot;...&quot;; //AssemblyQualifiedName Type t =...

Объяснить, как добавляется класс Person в класс People
Объясните пожалуйста этот код. public class People : ObservableCollection&lt;Person&gt; { public People() { ...

6
2 / 2 / 0
Регистрация: 25.07.2010
Сообщений: 18
25.07.2010, 17:01
Такое приравние типов называется covariance (если не ошибаюсь) и теперь возможно в .net 4! (наконец то).
Если же работаете на более ранних версиях .net, то только кастом:
var list2 = list1.Cast<Obj>().ToList();
0
5 / 5 / 4
Регистрация: 06.05.2010
Сообщений: 180
25.07.2010, 18:37  [ТС]
Про коверианс очнь хорошая новость! не знал. A list1.Cast<Obj>().ToList(); сохраняет ссылку на первоначальный list1 или создает новый объект?

Я кстати уже победил генериком

C#
1
2
3
4
void Init<ItemType>(ICollection<ItemType> coll) where ItemType:Obj
{
bla-bla-bla
}
После PHP не перестаю удивляться, сколько кода надо в .NET нафигачить, чтобы получить какую-нибудь очевидную вещь!

А на .NET 4 можно еще попробовать динамиком это сделать. Это мой родной стиль из PHP
C#
1
2
3
4
5
6
7
void Init (dinamic collection){ //передал сюда IList<Person>
   collection.clear();
   collection.add(Person);
   ...
   ...
   ...
}
0
2 / 2 / 0
Регистрация: 25.07.2010
Сообщений: 18
25.07.2010, 23:04
Ну вещи очевидные, но есть принципы ООП и прочая фигня, поэтому не всё так просто "прикрутить" к языку.
Динамикс - зло (в вашем конкретном случае). Лень расписывать почему, но зло )
.ToList() в принципе запускает луп и возвращает новый инстанс листа, собсвенно это и будет ваш list2, который к list1 не имеет никакого отношения (кроме косвенного). А дальше оперируйте с list2 как и собирались.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
25.07.2010, 23:46
Цитата Сообщение от Lexa83 Посмотреть сообщение
Ну вещи очевидные, но есть принципы ООП и прочая фигня, поэтому не всё так просто "прикрутить" к языку.
Принципы ООП тут не причем, есть понятие строгой типизации. Ничто не мешает языку с динамической типизацией быть объектно-ориентированным.
Цитата Сообщение от alexey_baranov Посмотреть сообщение
После PHP не перестаю удивляться, сколько кода надо в .NET нафигачить, чтобы получить какую-нибудь очевидную вещь!
Возможно настолько же очевидную, насколько и ошибочную. Строгая типизация появилась не просто так.
0
2 / 2 / 0
Регистрация: 25.07.2010
Сообщений: 18
25.07.2010, 23:54
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Принципы ООП тут не причем, есть понятие строгой типизации. Ничто не мешает языку с динамической типизацией быть объектно-ориентированным.
Имелось в виду прочая фигня ), что c# как язык "разрастается" и обзаводиться всё новыми плюшками/погремушками. Уже одно наличие dynamics в языке определенных типов есть некий "уход от концепции". Но удобно, поэтому я за.
0
5 / 5 / 4
Регистрация: 06.05.2010
Сообщений: 180
26.07.2010, 10:12  [ТС]
В грамматиках PHP можно написать как

C#
1
2
3
4
function (List<Person> collection){
    foreach (collection as item)
        echo item.Name;
}
а можно так
C#
1
2
3
4
function (collection){
    foreach (collection as item)
        echo item.Name;
}
Оба кода синтаксически правильны и оба соберутся как надо. В первом случае я могу передать в метод только List<Person> и его потомков. А во втором хоть List, хоть Map, хоть что угодно, так называемый Duck Typing. Это очень удобно, хотя и не безопасно.

Я насколько понял, в VS2010 это можно сделать при помощи dinamic, я как домой вернулся! Местами буду применять, где на этапе компиляции не известен тип.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.07.2010, 10:12
Помогаю со студенческими работами здесь

Что такое ICollection?
Что делает строка? ICollection collect;

Обявление переменной типа ICollection
// Создать хеш-таблицу Hashtable ht = new Hashtable (); // Добавить элементы в таблицу ht.Add (&quot;здание&quot;, &quot;жилое...

Класс-контейнер : ICollection, DRY or DIE
Есть 3 абстрактных класса, как пример Product, Dealer, Fabrica (имена сущностей максимально абстрактные) Далее реализую конкретные...

Коллекции и их интерфейсы (IList, ICollection, IDictionary, IEnumerable, IComparer)
Расскажите пожалуйста какие интерфейсы зачем нужны. Если можно с примерами. Почитал MSDN - ничего не понял, в остальном пространстве...

Какой интерфейс идентичен ICollection<T> но без методов Add(), Remove(), Clear()
Добрый вечер! Не подскажите интерфейс, который идентичен ICollection&lt;T&gt;, за исключением того, что в нём отсутствую методы Add(),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru