public ArrayList pack = new ArrayList(); //к сожалению без этой глоб. переменной никак не оботись (много загона получиться)
public void Func()
{
....
foreach (SetOfBox b in boxes)
{
if (b.isPacked ==true)
{
pack.Add(b);
}
}
.....
}
C# ArrayList (VS2008)
Имеется след. код:
Код:
и имеется функция, в которой я, чтобы не портить добавляющиеся по мере выполнения объекты, при вызове создаю новый список:
Код:
public bool isCross(SetOfBox[] R, SetOfBox box)
{
ArrayList ar = new ArrayList();
ar = pack;
// здесь работаю уже с ar, и добавляю туда еще объекты
foreach (SetOfBox s in R)
{
if (s.isPacked)
{
ar.Add(s);
}
}
}
{
ArrayList ar = new ArrayList();
ar = pack;
// здесь работаю уже с ar, и добавляю туда еще объекты
foreach (SetOfBox s in R)
{
if (s.isPacked)
{
ar.Add(s);
}
}
}
так вот я не могу понять, в функции Func() в pack добавляются элементы (всё правильно), потом в isCross создаю "копию" этого списка (список ar), а когда в ar добавляю еще объекты, то и содержимое pack меняется (как бы уже pack становиться копией ar).
догадываюсь что объяснение простое:), но уже голова несоображает (всё таки 9 час отладки программы 8-)). объясните плиз:)
Цитата:
догадываюсь что объяснение простое, но уже голова несоображает (всё таки 9 час отладки программы 8-)). объясните плиз
Код:
ArrayList ar = new ArrayList();
ar = pack;
ar = pack;
Открой любую книжку по C# и прочитай, что всё, что не наследуется от ValueType храниться в куче, а переменная хранит указатель на этот объект в куче.
http://msdn.microsoft.com/ru-ru/library/system.collections.arraylist.aspx
Цитата:
ArrayList(ICollection)
Инициализирует новый экземпляр класса ArrayList, который содержит элементы, скопированные из указанной коллекции, и обладает начальной емкостью, равной количеству скопированных элементов.
Инициализирует новый экземпляр класса ArrayList, который содержит элементы, скопированные из указанной коллекции, и обладает начальной емкостью, равной количеству скопированных элементов.
нужно(не проверял, студии под рукой нету сейчас):
Код:
var ar = new ArrayList(pack);
спасибо