2012-03-19 5 views
0

私は現在自分のコードをリファクタリングしていて、決して満足していないことがいくつか見つかりました。大規模な配列を大量に扱うので、配列を常にコピーする必要はありません。現在、以下のように私のコードを見て:配列をパラメータとして渡します(Clone()を使用するか参照を使用します)?

public class Mtx 
{ 
    float[] Data; 

    public Mtx(float[] data_in) 
    { 
     Data = (float[])data_in.Clone(); 
    } 
} 

をそうでない場合、私は単にこの

public class Mtx 
{ 
    float[] Data; 

    public Mtx(float[] data_in) 
    { 
     Data = data_in; 
    } 
} 

をすればDATA_IN入力引数を変更するためには、フィールド自体を変更することになります。これにはグローバルな解決策がありますか?これをどうやって解決しますか?

おかげ

+0

*解決してください... –

+1

FYI - 提供されたコードでは、 'Data'は**フィールド**で**プロパティ**ではありません。 – Greg

+0

"どうやってこれを解決しますか?" - 配列にあまり依存しないので... –

答えて

0

は、私はあなたの目的は、アレイへの読み取り専用アクセスを提供するために、着信配列を変更することから、消費者のMtxを予防することであるならば、あなたはReadOnlyCollectionクラスを使用する可能性があるとします。とにかく、最初のコード例で行われた作業を繰り返すReadOnlyCollectionにデータをコピーすることは、Mtxのコンストラクタで新しいインスタンスをインスタンス化する際に、これらのコレクションを回るリファクタリングが必要になるかもしれません。

EDIT:MSDNをダブルチェックしました。 ReadOnlyCollectionを作成すると、基本となる配列がO(1)操作としてラップされます。 Mtxのコンストラクタでそれを行うことができます。ただし、渡された配列をクラス外で変更すると、その変更が結果のReadOnlyCollectionに反映されます。おそらくこれはあなたの特定のニーズが何であるかをあなたの利点に利用することができます。

関連する問題