5

CA1819 msdn パフォーマンス警告ルールについて:

プロパティが読み取り専用であっても、プロパティによって返される配列は書き込み保護されません。配列の改ざんを防ぐために、プロパティは配列のコピーを返す必要があります。通常、ユーザーは、このようなプロパティを呼び出すことによるパフォーマンスへの悪影響を理解していません。具体的には、プロパティをインデックス付きプロパティとして使用する可能性があります。

プロパティによって返されたときに他のオブジェクトが変更可能かどうか、またはこれが配列に対してのみ発生するかどうかを知りたいですか? 配列に対してのみ有効な場合、なぜですか?

4

1 に答える 1

3

あなたが持っているとしましょう:

int[] ints = new int[] { 1, 2, 3, 4 }

public int[] Ints { get { return ints; } }

クラスの消費者は次のことができます。

instance.Ints[0] = 10;

したがって、クラスのデータの変更を許可しています。

これを防ぐには、次のようなことができます。

public IEnumerable<int> Ints { get { return ints; } }

したがって、クラスの消費者は値を読み取ることはできますが、変更することはできません。

さて、なぜですか?

配列のデータを変更したい場合は、クラスの設計に依存します。プロパティに がないため、配列の値を操作できない可能性があるという事実について警告が表示setされます。

PS:コレクションの変更を防ぐために、読み取り専用コレクションなどの多くの方法があります

これを見てください

于 2013-09-09T13:45:29.043 に答える