セキュリティコードアナリストを実行したところ、 CA2105警告 が発生しました。グレード改ざんの例を見ました。 int []を読み取り専用intに割り当てることができることに気づいていませんでした。読み取り専用はC++ constのようなものであり、違法だと思いました。
違反を修正する方法では、オブジェクトのクローンを作成するか(実行したくない)、「配列を変更できない強い型のコレクションに置き換える」ことをお勧めします。リンクをクリックして「ArrayList」を表示し、各要素を1つずつ追加しましたが、何かが追加されるのを防ぐことができないようです。
それで、私がこのコードを持っているとき、それを読み取り専用コレクションにするための最も簡単または最良の方法は何ですか?
public static readonly string[] example = { "a", "b", "sfsdg", "sdgfhf", "erfdgf", "last one"};
変更できないコレクションを作成する最も簡単な方法は、
MSDNの例:
List<string> dinosaurs = new List<string>();
dinosaurs.Add("Tyrannosaurus");
dinosaurs.Add("Amargasaurus");
dinosaurs.Add("Deinonychus");
dinosaurs.Add("Compsognathus");
ReadOnlyCollection<string> readOnlyDinosaurs = new ReadOnlyCollection<string>(dinosaurs);
public static readonly ReadOnlyCollection<string> example
= new ReadOnlyCollection<string>(new string[] { "your", "options", "here" });
(ただし、パブリックフィールドではなくget
プロパティとして公開される可能性があります)
配列を使用している場合は、次を使用できます
return Array.AsReadOnly(example);
配列を読み取り専用コレクションにラップします。
var readOnly = new ReadOnlyCollection<string>(example);
同様の解決策を探していましたが、クラス内からコレクションを変更できるようにしたかったので、ここで概説するオプションを選択しました: http://www.csharp-examples.net/readonly-collection /
要するに、彼の例は次のとおりです。
public class MyClass
{
private List<int> _items = new List<int>();
public IList<int> Items
{
get { return _items.AsReadOnly(); }
}
}
ReadOnlyCollection<string> readOnlyCollection =
new ReadOnlyCollection<string>(example);