Вниз  C# / .NET
- 2.02.2015 / 15:23
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
Naik, и...? В # нет type erasing, и для списков должна быть определенной операция [ ]. Очевидно, bonndar что-то не то сделал. Объявил список объектов, а не точек, например.
- 2.02.2015 / 15:24
Naik
  Пользователь

Naik 
Сейчас: Offline
Ксакеп, тут нужен
  1. List /* a не */ ArrayList


Изменено Naik (2.02 / 15:25) (всего 1 раз)
- 2.02.2015 / 17:09
boNNdaR
  Пользователь

boNNdaR 
Сейчас: Offline
Объявляю вот так:
  1. public ArrayList а=new ArrayList();


Изменено boNNdaR (2.02 / 17:10) (всего 1 раз)
- 2.02.2015 / 17:13
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
Что я и говорил.

boNNdaR, напиши так:
  1. ArrayList<Point> аrr = new ArrayList<Point>();

И можно будет обойтись без явного приведения к Point:
  1. arr[i].X

UPD: List вместо ArrayList.

Изменено Ксакеп (2.02 / 17:34) (всего 1 раз)
- 2.02.2015 / 17:27
Asylum29
  Пользователь

Asylum29 
Сейчас: Offline
ArrayList в C# не является обобщенным типом.
https://msdn.microsoft.com/ru-...ylist(v=vs.110).aspx
Потому такая строка невозможна:
  1. ArrayList<Point> аrr = new ArrayList<Point>();

А данный код
  1. ((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
Боже мой, что за язык. ArrayList не обобщенный тип. Ужас.
- 2.02.2015 / 17:38
Asylum29
  Пользователь

Asylum29 
Сейчас: Offline
Нормальный язык. ArrayList является устаревшим типом, насколько мне известно, он использовался, когда в C# еще не было поддержки обобщений.
- 2.02.2015 / 20:30
boNNdaR
  Пользователь

boNNdaR 
Сейчас: Offline
Тоесть лучше List юзать?
- 2.02.2015 / 20:39
Naik
  Пользователь

Naik 
Сейчас: Offline
Ксакеп, а я о чем писал? :gg:
- 2.02.2015 / 20:42
Asylum29
  Пользователь

Asylum29 
Сейчас: Offline
Да, List<T> обеспечивает типобезопасность, а также избавляет от лишних операций упаковки/распаковки значимых типов.

Однако Вам все равно придется заводить новую переменную для изменения типа-значения в листе, то есть:
  1. var list = new List<Point>();
  2. ...
  3. var p = list[i];
  4. p.X = 10;
  5. list[i] = p;

А следующий код не выполнится:
  1. var list = new List<Point>();
  2. ...
  3. list[i].X = 10; // ошибка


Изменено Asylum29 (2.02 / 20:56) (всего 1 раз)
Наверх  Всего сообщений: 296
Фильтровать сообщения
Поиск по теме
Файлы топика (7)