たとえば、プライベートリストを持つジェネリッククラスがあります。少なくとも2つの方法で、このリストの読み取り専用ラッパーを返すようにすることができます。
public class Test<T>
{
public List<T> list = new List<T>();
public IEnumerable<T> Values1
{
get
{
foreach (T i in list)
yield return i;
}
}
public IEnumerable<T> Values2
{
get
{
return list.AsReadOnly();
}
}
}
両方とも、基になるコレクションの変更Values1
をValues2
反映し、それ自体が変更されるのを防ぎます。
どちらが望ましいですか?何に注意する必要がありますか?それとも他にもっと良い方法はありますか?