2012-01-18 3 views
0

Я только что начал использовать ArrayLists в некотором коде C#, и у меня возникли проблемы при сортировке.ArrayList меняется после сортировки

Сначала я определяю создать ArrayList объект под моим классом:

ArrayList cutList = new ArrayList; 

Тогда я поставил и отсортировать список массива, чтобы найти минимум:

cutList.Add("2200","1800","1200","1"); 
int minList = (int)GetMinValue(cutList); 

Использование функции:

public static object GetMinValue(ArrayList arrList) 
{ 
ArrayList sortArrayList = arrList; 
sortArrayList.Sort(); 
return sortArrayList[0]; 
} 

Позже я попытаюсь найти индекс cutList [2], и я нахожу «1200», потому что функция также сортировалась c utList. У меня также была такая же проблема в прошлом, когда я устанавливал переменную в параметры приложения, а затем менялся параметр «Приложения» при изменении переменной. Как правильно исправить эти проблемы. Я изучаю C# самостоятельно, и я виноват в том, чтобы немного пропустить. Есть ли урок, который у меня отсутствует?

+0

Google для «ссылочных типов» –

ответ

0

Проблема в вашем коде заключается в том, что ArrayList sortArrayList = arrList; не копирует arrList в sortArrayList: присваивание просто создает новый псевдоним для существующего объекта. Для того, чтобы сделать код работы, используйте

ArrayList sortArrayList = (ArrayList)arrList.Clone(); 

Я должен добавить, что это, вероятно, самый неэффективный способ смотреть вверх мин элемент в списке, а также довольно архаичный контейнер. Я бы предпочел использовать List<string> вместо ArrayList и использовать функцию LINQ Min() для получения минимального элемента.

+0

Я проделал еще несколько исследований и нашел некоторые источники, обсуждая «пройти по ссылке». Точно так же функция Clone() позволяет создавать собственные ячейки памяти, а не указывать на одну и ту же память «ссылка», которая изменяется при изменении cutList или arrList? Причина, по которой я использовал ArrayList для работы, так что я могу, надеюсь, узнать больше о ArrayList. Похоже на мой урок, я не должен использовать их для сортировки, чтобы найти min/max ..... –

+0

'Clone()' создает копию, которая не зависит от ее оригинала. Вы можете сортировать копию, добавлять к ней элементы или очищать ее - ничего не произойдет с оригиналом. Естественно, изменения в оригинале также не будут отражены в копии. – dasblinkenlight