私はプロパティでList<T>
を公開するべきではないことを知っていますが、それを行う適切な方法は何ですか?たとえば、このやって:リストを適切に公開<T>?
public static class Class1
{
private readonly static List<string> _list;
public static IEnumerable<string> List
{
get
{
return _list;
//return _list.AsEnumerable<string>(); behaves the same
}
}
static Class1()
{
_list = new List<string>();
_list.Add("One");
_list.Add("Two");
_list.Add("Three");
}
}
は私の発信者は、単にList<T>
にキャストバックすることが可能になります。
private void button1_Click(object sender, EventArgs e)
{
var test = Class1.List as List<string>;
test.Add("Four"); // This really modifies Class1._list, which is bad™
}
私は本当に不変List<T>
をしたいのであれば、私は常に新しいリストを作成しなければならないでしょうか?
public static IEnumerable<string> List
{
get
{
return new ReadOnlyCollection<string>(_list);
}
}
しかし、私のリストには、誰かがそれにアクセスしようとするたびにクローン化されるよう、パフォーマンスのオーバーヘッドがある場合、私は心配している:例えば、これは(テストでは、キャスト後にnullである)動作するようですか?
プロパティとして(Tの)リストを暴露/ wが間違って何ですか? – Jason
拡張することはできません:http://blogs.msdn.com/fxcop/archive/2006/04/27/faq-why-does-donotexposegenericlists-recommend-that-i-expose-collection-lt-t-gt-リストの代わりに-lt-t-gt-david-kean.aspx –
これのポイントは何か分かりませんか?私は、リストとしてプロパティを公開するだろう... ???これはスレッドセーフな問題ですか? –