2012-04-18 27 views
9

C#で読み取り専用2次元配列を返す方法はありますか?C#で読み込み専用2次元配列

私はReadOnlyCollectionが1次元配列に使用するのに適していることを知り、this[] {get}を実装する独自のラッパークラスを作成しています。しかし、この車輪が既に存在するならば、私は車輪を再構築したくない。

+2

多次元配列afaik – BrokenGlass

+0

には何も組み込まれていません。次は、StackOverflowに関する同様の質問からの回答です - http://stackoverflow.com/questions/678379/is-there-a-read-only-generic-dictionary-available -in-net –

+0

それほどよく似ていない@ Scorpion-Prince。 –

答えて

1

これをシミュレートする方法は1つだけです。

プライベートアレイを使用して独自のクラスを作成する必要があります。

配列の最も類似したインプリメンテーションは、インデクサである:

'10 0.8' リンクが二次元アレイのシミュレーションを示します。

ゲッターでのみインデクサーを実装する場合、ユーザーは要素を読み取ることができますが、書き込むことはできません。ただし、各要素がオブジェクト(参照型)である場合は、アクセスされたオブジェクトのプロパティの変更を防ぐことはできません。

しかし、「読み取り専用」のオブジェクトをシミュレートするいくつかの方法があります

  • それらは変更することができないように、プロパティのみを読み取るようにアレイ内の各要素のプロパティを公開するラッパークラスを作成します
  • 、オブジェクトへの変更がないように、代わりにプライベートアレイ内の元の要素のプライベート配列の要素のコピーを返すことによって、変更を破りプリミティブ値型(int等)
  • を使用配列内の元のオブジェクトに影響を与えます。

C++のような他の言語では、定数値への参照とポインタがありますが、これはC#では存在しません。

3

申し訳ありませんが、あなたが求めるケースを処理する組み込みの実装はありません。 しかし、あなた自身で簡単に実装することは難しいことではありません。

だけと思うが、私はあなたがやるだろうということ、それをあなたが意識を願って読み取り専用コレクションが、そのコレクション内のない要素です。

これが役に立ちます。

関連する問題