コード分析 (VS 2012) が次のコードに対して「CA1819: プロパティは配列を返さないでください」と出力する理由を知りたいです。
private byte[] BackingFieldData;
public byte[] Data
{
get { return this.BackingFieldData; }
set { this.BackingFieldData = value; }
}
警告の説明には、プロパティが読み取り専用であっても、プロパティによって返される配列は書き込み保護されていません。配列の改ざんを防ぐために、プロパティは配列のコピーを返す必要があります。
私が欲しいのは、配列を返すことです。ユーザーは配列を変更できる必要がありますが、サイズを変更することはできません。配列のサイズは、ユーザーによって頻繁にアクセスされます。ユーザーは、インデックスによって要素にアクセスできる必要があります。したがって、配列型は完全に適合するようです。
私が検討した代替案は、 (インデックス作成はandなどIEnumerable<byte>
を使用してひどく行われます)、 (要素の追加と削除に焦点を当てています-私はそれを望んでいません)、および(クラスが常にsをスローするメソッドを公開するとき、私はそれを嫌います。良いコーディングスタイルの私見)。また、配列の周りにラッパー クラスを使用してカスタム インターフェイスを作成することも考えましたが、そのポイントは何ですか (警告を抑制せずに取り除くことができたことを除いて)。Skip
Take
IList<byte>
ReadOnlyCollection<byte>
NotSupportedException
それで、配列型の代わりに返すのに適した型、またはこの場合に配列を返さない正当な理由について誰かが知っていますか? これまでに言及しなかった影響はありますか?