4

メソッドを使用して特定の操作を実行するクラスに 2 つのプライベート配列があります。このメソッドが呼び出された後、これら 2 つの配列に結果が格納されます。これらの配列プロパティを作成するのは良い方法ではないため、プライベート配列のクローンを返す別のプロパティを用意することを計画していました。

1) 配列のクローンを返す際のオーバーヘッドはどのくらいですか? あらゆる場合に目立たないのですか?

2) 配列が 1 つしかない場合は、インデクサーを使用できます。クラス内の複数の配列にインデクサーを使用する特定のメカニズムはありますか?

4

3 に答える 3

2

配列の複製はメモリ割り当てです。影響はアレイのサイズに直接依存します。

インデクサーは単なるメソッドです。別のアプローチは、GetName(int index)andなどのメソッドを追加することGetValue(int index)です (たとえば、配列が名前/値である場合)。残念ながら、C# には組み込みの名前付きインデクサーはありません。

パフォーマンスが重要で、複数の値にアクセスする必要がある場合は、呼び出し元が提供する配列に値をコピーするメソッドを使用する別の方法がありますGetNames(string[] names, int offset) { this.names.CopyTo(names, offset); }これは、呼び出し元が単一のバッファーを割り当て、それを使用して複数のオブジェクトから値を取得できるようにすることで役立ちます。または、いくつかのパラメーター (カウントなど) を追加する場合は、個別ではなくバッチで値を取得します。ただし、これが必要/有用であるかどうかは、正確なシナリオに大きく依存します。

于 2012-10-08T08:13:14.927 に答える
1

たぶん、このようなことをすることは可能ですか

KeyValuePair this[int i] { get { /* code */ } private set{ /* code */ } }
于 2012-10-08T08:19:37.847 に答える