2.02.2015 / 15:23 | |
Ксакеп Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| Naik, и...? В # нет type erasing, и для списков должна быть определенной операция [ ]. Очевидно, bonndar что-то не то сделал. Объявил список объектов, а не точек, например.
|
2.02.2015 / 15:24 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| Ксакеп, тут нужен List /* a не */ ArrayList
Изменено Naik (2.02 / 15:25) (всего 1 раз) |
2.02.2015 / 17:09 | |
boNNdaR Пользователь Сейчас: Offline
Имя: Рома Откуда: місто Львів Регистрация: 01.12.2010
| Объявляю вот так: public ArrayList а=new ArrayList();
Изменено boNNdaR (2.02 / 17:10) (всего 1 раз) |
2.02.2015 / 17:13 | |
Ксакеп Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| Что я и говорил. boNNdaR, напиши так: ArrayList<Point> аrr = new ArrayList<Point>();
И можно будет обойтись без явного приведения к Point: UPD: List вместо ArrayList. Изменено Ксакеп (2.02 / 17:34) (всего 1 раз) |
2.02.2015 / 17:27 | |
Asylum29 Пользователь Сейчас: Offline
Регистрация: 02.02.2015
| ArrayList в C# не является обобщенным типом. https://msdn.microsoft.com/ru-...ylist(v=vs.110).aspxПотому такая строка невозможна: ArrayList<Point> аrr = new ArrayList<Point>();
А данный код ((Point)arraybla[i]).X = 10;
приводит к распаковке значимого типа из кучи. Для задания свойств типа Point требуется создать новую структуру типа Point в стеке. Однако после изменения полей такая структура может быть сразу же подвергнута сборке мусора. Потому данный код в C# тоже невозможен. Лучше использовать, как уже посоветовали, обобщенный тип List<T>. https://msdn.microsoft.com/ru-ru/library/6sh2ey19(v=vs.110).aspx Изменено Asylum29 (2.02 / 17:31) (всего 2 раза) |
2.02.2015 / 17:33 | |
Ксакеп Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| Боже мой, что за язык. ArrayList не обобщенный тип. Ужас.
|
2.02.2015 / 17:38 | |
Asylum29 Пользователь Сейчас: Offline
Регистрация: 02.02.2015
| Нормальный язык. ArrayList является устаревшим типом, насколько мне известно, он использовался, когда в C# еще не было поддержки обобщений.
|
2.02.2015 / 20:30 | |
boNNdaR Пользователь Сейчас: Offline
Имя: Рома Откуда: місто Львів Регистрация: 01.12.2010
| Тоесть лучше List юзать?
|
2.02.2015 / 20:39 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| Ксакеп, а я о чем писал? |
2.02.2015 / 20:42 | |
Asylum29 Пользователь Сейчас: Offline
Регистрация: 02.02.2015
| Да, List<T> обеспечивает типобезопасность, а также избавляет от лишних операций упаковки/распаковки значимых типов. Однако Вам все равно придется заводить новую переменную для изменения типа-значения в листе, то есть: var list = new List<Point>();
...
var p = list[i];
p.X = 10;
list[i] = p;
А следующий код не выполнится: var list = new List<Point>();
...
list[i].X = 10; // ошибка
Изменено Asylum29 (2.02 / 20:56) (всего 1 раз) |