これList<Item>
を返すクラスにゲッターがあります。呼び出したユーザーが返されたリストを変更できないようにするためにできることはありますか? (参照型なので、返された参照を変更すると、ソース オブジェクトに格納されているリストに影響すると思います)
3532 次
2 に答える
9
でラップされたリストを返しますReadOnlyCollection<T>
。
public ReadOnlyCollection<Item> MyROList {
get { return new ReadOnlyCollection<Item>(myList); }
}
private List<Item> myList = new List<Item>();
詳細はSO の別の場所にあります。
クラスの使用状況に応じてReadOnlyCollection
、構築時に を割り当て、それを基になる にリンクできますList
。常に、またはほとんどの場合、このプロパティが必要であると予想されList
、その時点で基礎となるものが適切に配置されている場合、これは賢明です。ReadOnlyCollection<Item>
それ以外の場合は、クラスメンバーを残して、null
必要に応じてゲッターに割り当てることができますnull
(スレッドセーフを考慮して)。
于 2010-10-02T15:26:37.613 に答える
4
クラスが今後行う変更を、返されるリストに反映させたいですか? もしそうなら、単純に
return new ReadOnlyCollection<T>(list);
大丈夫でしょう。
ただし、将来何も変更されないコレクション (つまり、元のリストの完全に独立したコピー) を返したい場合は、次を使用することをお勧めします。
return new ReadOnlyCollection<T>(list.ToList());
(LINQ のToList
方法を使用すると、リストを複製する非常に簡単な方法になります。)
リストの要素の型が変更可能な参照型である場合、参照されたオブジェクト内のデータへの変更は、もちろん、引き続き全員に表示されることに注意してください。
于 2010-10-02T15:28:55.243 に答える