2012-01-18 2 views
0

私はちょうどC#コードでArrayListsを利用し始めており、ソート時にいくつか問題があります。ソート関数の後に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]を見つけようとしていますが、この関数はまた、 utList。過去に同じ問題が発生しました。アプリケーション設定に変数を設定した後、変数を変更するとアプリケーション設定が変更されます。これらの問題を正しく修正する方法。私は自分でC#を勉強していて、ちょっと飛び回っているという有罪です。私が紛失しているオブジェクトに関するレッスンはありますか?

+0

Googleの「参照タイプ」 –

答えて

0

ArrayList sortArrayList = arrList;は、arrListsortArrayListにコピーされません。割り当てによって既存のオブジェクトの新しいエイリアスが作成されるだけです。あなたのコードを動作させるために、

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

を使用し、私はこれはおそらく、リスト内の分要素、およびまたかなり古風なコンテナを見上げるの中で最も非効率的な方法であることを追加する必要があります。 ArrayListの代わりにList<string>を使用し、LINQのMin()関数を使用して最小要素を取得することをお勧めします。

+0

私はもう少し研究を重ねて、「参考資料」を議論するいくつかの情報源を見つけました。それで、clone()関数は、同じメモリ "reference"を指すのではなく、それ自身のメモリ位置を作成することを許します。これは、cutListまたはarrListが変更されたときに変更されます。 ArrayListを使用した理由は、ArrayListについてもっと学ぶことができたからです。私のレッスンのように見えるのですが、最小/最大を見つけるためにソートするべきではありません..... –

+0

'Clone()'はオリジナルとは独立したコピーを作成します。コピーをソートしたり、要素を追加したり、クリアすることができます。オリジナルには何も起こりません。当然のことながら、オリジナルへの変更はコピーにも反映されません。 – dasblinkenlight

関連する問題